0


「SAP ABAP」OPEN SQL(七)【GROUP BY | HAVING | ORDER BY】

在这里插入图片描述

💂作者简介:****THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。


💅文章概要:****各位小伙伴们大家好呀!今天继续SAP ABAP系列文章的讲解,本节带来的内容是OPEN SQL中GROUP BY语句和HAVING语句以及ORDER BY语句的介绍,希望大家喜欢!


🤟每日一言:****永远年轻,永远热泪盈眶!

目录


前言

在这里插入图片描述

  GROUP BY语句,HAVING语句以及ORDER BY语句在SAP ABAP中起到了关键的作用。通过上述语句可以实现对数据的分组,条件限定,排序等等,可以更加有效地帮助我们从数据库表中取到想要的数据,跟着本文的脚步,一起学习吧!


数据库表准备

  本文所有案例都是基于数据库表

SFLIGHT

,本案例中的SFLIGHT数据库表数据如下,供各位小伙伴们对照来观察代码运行结果:

在这里插入图片描述


GROUP BY语句介绍

在这里插入图片描述

  以下是

从数据库表中读取数据并且对数据进行分组聚合

的一般语法样式:

SELECT<f1><f2>...<fn><aggregate>...AS<alias>FROM<table_name>GROUPBY<f1><f2>...<fn><aggregate>INTO[CORRESPONDING FIELDSOFTABLE]<itab>WHERE<condition>

参数介绍:

  • <fn>: 数据库表中字段。
  • <aggregate>: 聚合函数。
  • <alias>: 聚合函数别名
  • <table_name>: 数据库表的名称。
  • <itab>:存放数据的内表。
  • <condition>:WHERE子句限定条件

案例演示

  下面给出一段以

SFLIGHT数据库表

为基准的示例代码,详细讲解了ABAP OPEN SQL中如何使用GROUP BY语句对数据进行分类,仅供参考:

PS:使用GROUP BY语句的先决条件是查询数据时使用了

聚合函数

,聚合函数将在下面讲解;并且最好使用

OPEN SQL的新语法

SELECT carrid,connid,SUM( price )AS total_price
FROM sflight
INTOTABLE@DATA(gt_sflight)GROUPBY carrid,connid.LOOP AT gt_sflight INTODATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-total_price.
ENDLOOP.

在这里插入图片描述

  这段代码主要目的是从表

SFLIGHT

中获取每个航空公司和航班连接的

总价格

,并将其存储在名为

gt_sflight

的内部表中,然后使用

循环读取内部表

并输出每个航空公司和航班连接的总价格。

  下面是对代码的逐段分析:

(一)第一段代码分析

SELECT carrid, connid,SUM(price)AS total_price
FROM sflight
INTOTABLE@DATA(gt_sflight)GROUPBY carrid, connid.

  这段代码是从表 SFLIGHT 中选择

carrid

connid

price

列,并使用

SUM 聚合函数

将每个航空公司和航班连接的价格相加。然后使用

INTO TABLE

将结果存储在名为

gt_sflight

的内部表中,并按照 carrid 和 connid 列进行

分组

(二)第二段代码分析

LOOP AT gt_sflight INTODATA(gs_sflight).

  这行代码是使用

LOOP AT 语句遍历

gt_sflight 内部表中的每个记录,并将每个记录存储在名为 gs_sflight 的工作区域变量中。

(三)第三段代码分析

WRITE: / gs_sflight-carrid, gs_sflight-connid, gs_sflight-total_price.

  这行代码使用

WRITE 语句

将每个记录的 carrid、connid 和 total_price 列的值输出到控制台屏幕。

斜杠符号

表示将每个记录的值

输出到新的行


聚合函数简介

在这里插入图片描述
  在ABAP Open SQL中,可以使用聚合函数对数据库中的数据进行汇总和统计。
聚合函数名称功能简介AVG取平均值COUNT取个数MAX取最大值MIN取最小值STDDEV取标准偏差SUM取合计

  • 在使用GROUP BY语句之前,必须要先使用聚合函数对数据进行汇总和统计!
  • 聚合函数括号中的字段需要与两边的括号距离至少一个单位:错误写法:SUM(PRICE)``````正确写法: SUM( PRICE )

HAVING语句介绍

在这里插入图片描述

HAVING语句

用于在

GROUP BY子句

之后

对聚合结果进行过滤

。HAVING语句与WHERE语句非常相似,但它们用于不同的语句部分。
注意事项HAVING语句必须跟在GROUP BY子句之后。HAVING语句使用与WHERE语句相同的语法。HAVING语句中的条件必须是聚合函数。

  以下是

对数据分组并且对聚合结果进行过滤

的一般语法样式:

SELECT<f1><f2>...<fn><aggregate>...AS<alias>FROM<table_name>GROUPBY<f1><f2>...<fn><aggregate>HAVING<agg_condition>INTO[CORRESPONDING FIELDSOFTABLE]<itab>WHERE<condition>

参数介绍:

  • <fn>: 数据库表中字段。
  • <aggregate>: 聚合函数。
  • <alias>: 聚合函数别名
  • <table_name>: 数据库表的名称。
  • <agg_condition>: 聚合结果过滤条件。
  • <itab>:存放数据的内表。
  • <condition>:WHERE子句限定条件

案例演示

  下面给出一段以

SFLIGHT数据库表

为基准的示例代码,详细讲解了ABAP OPEN SQL中如何使用

HAVING

语句对数据聚合结果进行过滤,仅供参考:

SELECT carrid,connid,SUM( price )AS total_price
FROM sflight
INTOTABLE@DATA(gt_sflight)GROUPBY carrid,connid
      HAVINGSUM( price )>1000.LOOP AT gt_sflight INTODATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-total_price.
ENDLOOP.

在这里插入图片描述

  该段代码在

GROUP BY语句案例演示

中的的基础上增加了一个

HAVING

语句,过滤了

total_price < 1000

的数据。


ORDER BY语句介绍

在这里插入图片描述

  ABAP中的

ORDER BY

语句用于对数据库表中的数据进行

排序

。排序可以按照

单个字段

多个字段

进行,可以按照

升序

降序

排列。

  以下是

对数据分组并且对聚合结果进行过滤以及最终对字段进行排序

的一般语法样式:

SELECT<f1><f2>...<fn><aggregate>...AS<alias>FROM<table_name>GROUPBY<f1><f2>...<fn><aggregate>HAVING<agg_condition>ORDERBY<f1><f2>...<fn><aggregate>[ASC|DESC]INTO[CORRESPONDING FIELDSOFTABLE]<itab>WHERE<condition>

参数介绍:

  • <fn>: 数据库表中字段。
  • <aggregate>: 聚合函数。
  • <alias>: 聚合函数别名
  • <table_name>: 数据库表的名称。
  • <agg_condition>: 聚合结果过滤条件。
  • [ ASCENDING|DESCENDING]: 可选项:ASCENDING(默认),升序;DESCENDING,降序。
  • <itab>:存放数据的内表。
  • <condition>:WHERE子句限定条件

单个字段排序

  下面给出一段以

SFLIGHT数据库表

为基准的示例代码,详细讲解了ABAP OPEN SQL中如何使用

单个字段·

进行排序,仅供参考:

SELECT carrid,connid,SUM( price )AS total_price
FROM sflight
INTOTABLE@DATA(gt_sflight)GROUPBY carrid,connid
      HAVINGSUM( price )>1000ORDERBY total_price.LOOP AT gt_sflight INTODATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-total_price.
ENDLOOP.

在这里插入图片描述

  该段代码在

HAVINF语句案例演示

中的的基础上增加了一个

ORDER BY

语句,对

total_price

进行了升序排序。

多个字段排序

  下面给出一段以

SFLIGHT数据库表

为基准的示例代码,详细讲解了ABAP OPEN SQL中如何使用

多个字段·

进行排序,仅供参考:

PS:如果ORDER BY语句中包含多个字段,那么排序优先级是从左往右依次递减的。也就是说,先按照第一个字段排序,如果第一个字段有相同的值,则按照第二个字段排序,以此类推。

SELECT carrid,connid,SUM( price )AS total_price
FROM sflight
INTOTABLE@DATA(gt_sflight)GROUPBY carrid,connid
      HAVINGSUM( price )>1000ORDERBY carrid  ASCENDING,total_price DESCENDING.LOOP AT gt_sflight INTODATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-total_price.
ENDLOOP.

在这里插入图片描述

  该段代码在

HAVINF语句案例演示

中的的基础上增加了一个

ORDER BY

语句,先对

carrid

进行了

升序

排序,再对

total_price

进行了

降序

排序。

使用ORDER BY删除数据

  除了用在SELECT语句中,ORDER BY语句还可以用在DELETE、UPDATE、INSERT等语句中。例如,可以

使用ORDER BY语句删除最后一行记录

DELETEFROM sflight
ORDERBY price ASCENDING
UP TO1ROWS.

这段代码可以删除掉SFLIGHT数据库表中PRICE列最小的该条数据


写在最后的话

  本文花费大量时间介绍了OPEN SQL中

GROUP BY

语句,

HAVING语句

以及

ORDER BY语句

的详细用法,希望能帮助到各位小伙伴,码文不易,还望各位大佬们多多支持哦,

你们的支持是我最大的动力!

在这里插入图片描述

      原
     
     
      创
     
     
      不
     
     
      易
     
     
      ,
     
     
      还
     
     
      希
     
     
      望
     
     
      各
     
     
      位
     
     
      大
     
     
      佬
     
     
      支
     
     
      持
     
     
      一
     
     
      下
     
    
   
   
    \textcolor{blue}{原创不易,还希望各位大佬支持一下}
   
  
 原创不易,还希望各位大佬支持一下

👍

      点
     
     
      赞
     
     
      ,
     
     
      你
     
     
      的
     
     
      认
     
     
      可
     
     
      是
     
     
      我
     
     
      创
     
     
      作
     
     
      的
     
     
      动
     
     
      力
     
     
      !
     
    
   
   
    \textcolor{9c81c1}{点赞,你的认可是我创作的动力!}
   
  
 点赞,你的认可是我创作的动力!

⭐️

      收
     
     
      藏
     
     
      ,
     
     
      你
     
     
      的
     
     
      青
     
     
      睐
     
     
      是
     
     
      我
     
     
      努
     
     
      力
     
     
      的
     
     
      方
     
     
      向
     
     
      !
     
    
   
   
    \textcolor{ed7976}{收藏,你的青睐是我努力的方向!}
   
  
 收藏,你的青睐是我努力的方向!

✏️

      评
     
     
      论
     
     
      ,
     
     
      你
     
     
      的
     
     
      意
     
     
      见
     
     
      是
     
     
      我
     
     
      进
     
     
      步
     
     
      的
     
     
      财
     
     
      富
     
     
      !
     
    
   
   
    \textcolor{98c091}{评论,你的意见是我进步的财富!}
   
  
 评论,你的意见是我进步的财富!
标签: 数据库 sap abap

本文转载自: https://blog.csdn.net/weixin_59480481/article/details/129578061
版权归原作者 ThundersArk 所有, 如有侵权,请联系我们删除。

“「SAP ABAP」OPEN SQL(七)【GROUP BY | HAVING | ORDER BY】”的评论:

还没有评论