💂作者简介:****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}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!
版权归原作者 ThundersArk 所有, 如有侵权,请联系我们删除。