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

图片[1] - 「SAP ABAP」OPEN SQL(七)【GROUP BY | HAVING | ORDER BY】 - MaxSSL

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


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


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

目录

  • 前言
  • 数据库表准备
  • GROUP BY语句介绍
    •  案例演示
  • 聚合函数简介
  • HAVING语句介绍
    •  案例演示
  • ORDER BY语句介绍
    •  单个字段排序
    •  多个字段排序
    •  使用ORDER BY删除数据
  • 写在最后的话

前言

图片[2] - 「SAP ABAP」OPEN SQL(七)【GROUP BY | HAVING | ORDER BY】 - MaxSSL

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


数据库表准备

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

图片[3] - 「SAP ABAP」OPEN SQL(七)【GROUP BY | HAVING | ORDER BY】 - MaxSSL


GROUP BY语句介绍

图片[4] - 「SAP ABAP」OPEN SQL(七)【GROUP BY | HAVING | ORDER BY】 - MaxSSL

  以下是从数据库表中读取数据并且对数据进行分组聚合的一般语法样式:

SELECT <f1><f2> ... <fn> <aggregate>...AS <alias>FROM <table_name>GROUP BY <f1> <f2>...<fn> <aggregate>INTO [CORRESPONDING FIELDS OF TABLE] <itab>WHERE <condition>

参数介绍:

  • : 数据库表中字段。
  • : 聚合函数。
  • : 聚合函数别名

  • : 数据库表的名称。
  • :存放数据的内表。
  • :WHERE子句限定条件
  •  案例演示

      下面给出一段以SFLIGHT数据库表为基准的示例代码,详细讲解了ABAP OPEN SQL中如何使用GROUP BY语句对数据进行分类,仅供参考:

    PS:使用GROUP BY语句的先决条件是查询数据时使用了聚合函数,聚合函数将在下面讲解;并且最好使用OPEN SQL的新语法

    SELECT carrid,connid,SUM( price ) AS total_priceFROM sflightINTO TABLE @DATA(gt_sflight)GROUP BY carrid,connid.LOOP AT gt_sflight INTO DATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-total_price.ENDLOOP.

    图片[5] - 「SAP ABAP」OPEN SQL(七)【GROUP BY | HAVING | ORDER BY】 - MaxSSL

      这段代码主要目的是从表 SFLIGHT中获取每个航空公司和航班连接的总价格,并将其存储在名为gt_sflight的内部表中,然后使用循环读取内部表并输出每个航空公司和航班连接的总价格。

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

      (一)第一段代码分析

    SELECT carrid, connid, SUM(price) AS total_priceFROM sflightINTO TABLE @DATA(gt_sflight)GROUP BY carrid, connid.

      这段代码是从表 SFLIGHT 中选择carridconnidprice列,并使用 SUM 聚合函数将每个航空公司和航班连接的价格相加。然后使用 INTO TABLE 将结果存储在名为gt_sflight的内部表中,并按照 carrid 和 connid 列进行分组

      (二)第二段代码分析

    LOOP AT gt_sflight INTO DATA(gs_sflight).

      这行代码是使用LOOP AT 语句遍历 gt_sflight 内部表中的每个记录,并将每个记录存储在名为 gs_sflight 的工作区域变量中。

      (三)第三段代码分析

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

      这行代码使用 WRITE 语句将每个记录的 carrid、connid 和 total_price 列的值输出到控制台屏幕。斜杠符号表示将每个记录的值输出到新的行


    聚合函数简介

    图片[6] - 「SAP ABAP」OPEN SQL(七)【GROUP BY | HAVING | ORDER BY】 - MaxSSL
     在ABAP Open SQL中,可以使用聚合函数对数据库中的数据进行汇总和统计。

    聚合函数名称功能简介
    AVG取平均值
    COUNT取个数
    MAX取最大值
    MIN取最小值
    STDDEV取标准偏差
    SUM取合计
    • 在使用GROUP BY语句之前,必须要先使用聚合函数对数据进行汇总和统计!
    • 聚合函数括号中的字段需要与两边的括号距离至少一个单位:
      错误写法:SUM(PRICE)
      正确写法: SUM( PRICE )

    HAVING语句介绍

    图片[7] - 「SAP ABAP」OPEN SQL(七)【GROUP BY | HAVING | ORDER BY】 - MaxSSL
    HAVING语句用于在GROUP BY子句之后对聚合结果进行过滤。HAVING语句与WHERE语句非常相似,但它们用于不同的语句部分。

    注意事项
    HAVING语句必须跟在GROUP BY子句之后。
    HAVING语句使用与WHERE语句相同的语法。
    HAVING语句中的条件必须是聚合函数。

      以下是对数据分组并且对聚合结果进行过滤的一般语法样式:

    SELECT <f1><f2> ... <fn> <aggregate>...AS <alias>FROM <table_name>GROUP BY <f1> <f2>...<fn> <aggregate>HAVING <agg_condition>INTO [CORRESPONDING FIELDS OF TABLE] <itab>WHERE <condition>

    参数介绍: