「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语句介绍
- 单个字段排序
- 多个字段排序
- 使用ORDER BY删除数据
- 写在最后的话
前言

GROUP BY语句,HAVING语句以及ORDER BY语句在SAP ABAP中起到了关键的作用。通过上述语句可以实现对数据的分组,条件限定,排序等等,可以更加有效地帮助我们从数据库表中取到想要的数据,跟着本文的脚步,一起学习吧!
数据库表准备
本文所有案例都是基于数据库表SFLIGHT,本案例中的SFLIGHT数据库表数据如下,供各位小伙伴们对照来观察代码运行结果:

GROUP BY语句介绍

以下是从数据库表中读取数据并且对数据进行分组聚合的一般语法样式:
SELECT <f1> <f2> ... <fn> <aggregate>...AS <alias>
FROM <table_name>
GROUP BY <f1> <f2>...<fn> <aggregate>
INTO [CORRESPONDING FIELDS OF TABLE] <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
INTO 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.

这段代码主要目的是从表 SFLIGHT中获取每个航空公司和航班连接的总价格,并将其存储在名为gt_sflight的内部表中,然后使用循环读取内部表并输出每个航空公司和航班连接的总价格。
下面是对代码的逐段分析:
(一)第一段代码分析
SELECT carrid, connid, SUM(price) AS total_price
FROM sflight
INTO TABLE @DATA(gt_sflight)
GROUP BY carrid, connid.
这段代码是从表 SFLIGHT 中选择
carrid、connid和price列,并使用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 列的值输出到控制台屏幕。斜杠符号表示将每个记录的值输出到新的行。
聚合函数简介

在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>
GROUP BY <f1> <f2>...<fn> <aggregate>
HAVING <agg_condition>
INTO [CORRESPONDING FIELDS OF TABLE] <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
INTO TABLE @DATA(gt_sflight)GROUP BY carrid,connidHAVING SUM( price ) > 1000.LOOP AT gt_sflight INTO DATA(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>
GROUP BY <f1> <f2>...<fn> <aggregate>
HAVING <agg_condition>
ORDER BY <f1> <f2>...<fn> <aggregate> [ASC|DESC]
INTO [CORRESPONDING FIELDS OF TABLE] <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
INTO TABLE @DATA(gt_sflight)GROUP BY carrid,connidHAVING SUM( price ) > 1000ORDER BY total_price.LOOP AT gt_sflight INTO DATA(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
INTO TABLE @DATA(gt_sflight)GROUP BY carrid,connidHAVING SUM( price ) > 1000ORDER BY carrid ASCENDING,total_price DESCENDING.LOOP AT gt_sflight INTO DATA(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语句删除最后一行记录:
DELETE FROM sflight
ORDER BY price ASCENDING
UP TO 1 ROWS.
这段代码可以删除掉SFLIGHT数据库表中PRICE列最小的该条数据
写在最后的话
本文花费大量时间介绍了OPEN SQL中GROUP BY语句,HAVING语句以及ORDER BY语句的详细用法,希望能帮助到各位小伙伴,码文不易,还望各位大佬们多多支持哦,你们的支持是我最大的动力!

✨原创不易,还希望各位大佬支持一下\textcolor{blue}{原创不易,还希望各位大佬支持一下}原创不易,还希望各位大佬支持一下
👍 点赞,你的认可是我创作的动力!\textcolor{9c81c1}{点赞,你的认可是我创作的动力!}点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!\textcolor{ed7976}{收藏,你的青睐是我努力的方向!}收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!\textcolor{98c091}{评论,你的意见是我进步的财富!}评论,你的意见是我进步的财富!
相关文章:
「SAP ABAP」OPEN SQL(七)【GROUP BY | HAVING | ORDER BY】
💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言A…...
容器-LinkedList
LinkedList LinkedList的概述 LinkedList的底层使用双向链表实现。 链表是一种线性数据结构,其中每个元素都是一个单独的对象,包含一个指向列表中下一个节点的引用。 它可以用于实现各种抽象数据类型,例如列表、堆栈、队列等。 LinkedLis…...
Flask 路由和视图函数
Flask 路由和视图函数一、路由 (Routing)二、视图函数 (View Functions)三、动态路由四、HTTP方法五、总结在Flask中,路由和视图函数是两个核心概念,它们协同工作以处理用户请求并生成响应。一、路由 (Routing) 路由是URL到Python函数的映射。当用户访问…...
Linux主机 SSH 通过密钥登录
我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 root 账户登录。其实,有一个更…...
中国信息安全测评中心-自主原创测评
信息技术产品自主原创测评是适应我国经济社会发展的需要,是适应国际知识产权保护的发展趋势,鼓励信息技术产业的自主创新和维护权利人合法权益的重要举措。 信息技术产品自主原创测评业务是指在开发者自主声明的基础上,通过对关键技术实现的全…...
redis杂谈之部分重同步的实现
背景: 部分重同步则用于处理断线后重复制情况:当从服务器在断线 后重新连接主服务器时,如果条件允许,主服务器可以将主从服务器连 接断开期间执行的写命令发送给从服务器,从服务器只要接收并执行这 些写命令ÿ…...
多态部分参考答案
一、选择题 1、下列关于动态联编的描述中,错误的是()。 A.动态联编是以虚函数为基础 B.动态联编是运行时确定所调用的函数代码的 C.动态联编调用函数操作是指向对象的指针或对象引用 D.动态联编…...
【高项】项目人力资源管理,沟通管理与干系人管理(十大管理)
【高项】项目人力资源管理,沟通管理与干系人管理(十大管理) 文章目录1、人力资源管理1.1 什么是人力资源管理?1.2 如何进行人力资源管理?(过程)1.3 人力资源管理工具1.4 人力资源管理文件2、沟通…...
Wikijs简介-强大可扩展的开源维基软件
Wikijs - 最强大 最可扩展的开源维基软件 使用 wiki.js 美丽直观的界面,让文档成为写作的乐趣! 优点 🔧 随时随地安装 几乎适用于任何平台,并与PostgreSQL、MySQL、MariaDB、MS SQL Server 或 SQLite 兼容! ⚙️ 管…...
微博舆情分析系统的设计与实现(python)
背景分析 随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由于现在网络的发达,微博舆情分析系统的资讯信息通过网络进行信息管理掀起了热潮,所…...
【AUTOSAR】【Lin通信】LinTrcv
目录 一、概述 二、功能说明 2.1 LIN收发器驱动程序操作模式 2.2 LIN收发器硬件操作模式 2.3 LIN收发器唤醒类型 2.4 LIN收发器唤醒模式 2.5 错误分类 2.5.1 开发错误 三、API接口 3.1 API定义 一、概述 该规范规定了模块LIN收发器驱动程序的功能、API和配置。它负责…...
UE4C++学习篇(十九)-- 动画蒙太奇初级使用
用一个第三人称的射击案例来简单介绍一下动画蒙太奇的使用,动画蒙太奇的具体介绍这里就不多说了,不知道的小伙伴可以去搜一下了解。 这里介绍角色射击,射击的时候播放一个射击动画。 选中需要创建出动画蒙太奇的动画,点击创建&am…...
子集和问题
目录 子集和问题 程序设计 程序分析 子集和问题 【问题描述】子集和问题的一个实例为〈S,c〉。其中,S={ x1 , x2 ,…,xn }是一个正整数的集合,c是一个正整数。子集和问题判定是否存在S的一个子集S1,使得: 试设计一个解子集和问题的回溯法。 对于给定的正整数的集…...
苹果蓝牙耳机太贵了买哪个替代?苹果蓝牙耳机平替推荐
随着人们生活水平的提高,蓝牙耳机已经遍布在我们生活的各个角落。同时随着科技的发展,许多人果粉选择苹果耳机平替。下面我们一起来看看2023年有哪些适用于苹果的平替蓝牙耳机吧! 一、南卡小音舱Lite2蓝牙耳机 蓝牙版本:5.3 售…...
CK-UR05-US桌面式超高频RFID发卡器开发手册之USB控制命令格式
CK-UR05-US桌面式超高频RFID发卡器支持USB控制命令格式,本文重点就此格式展开说明! CK-UR05-US桌面式超高频RFID发卡器1、取版本号(GetReaderVersion) 功能:取读写器的硬件、软件版本 命令码: 02H 命令参数:无 命令包: 『40H 02H 02H BCH』 举例: 如…...
【华为OD机试】1025 - 字符串加解密
文章目录一、题目🔸题目描述🔸输入输出🔸样例1二、代码参考作者:KJ.JK🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &#x…...
阿里云版GPT官宣,我们问了它10个问题
4月7日,阿里云宣布自研大模型“通义千问”,目前已开始邀请用户测试体验。 阿里达摩院在NLP自然语言处理等前沿科研领域早已布局多年,并于2019年启动大模型研发,通义千问便是其最新成果,相当于阿里云版的“ChatGPT”。 …...
ORM框架之NHibernate
什么是NHibernate NHibernate是一个开源的对象关系映射(ORM)框架,它允许开发人员使用面向对象的方式来访问关系型数据库。它是Hibernate框架的C#版本,Hibernate框架是Java平台上的ORM框架。 使用NHibernate,您可以将…...
凑微分练习
前言 在学习第一类换元法(凑微分法)时,我们常常需要凑微分。为了更加熟练地运用凑微分法,下面有几道凑微分例题供大家练习。 记住df(x)f′(x)dxdf(x)f(x)dxdf(x)f′(x)dx 例题1 dx‾d(ax)dx\underline{\quad}d(ax)dxd(ax)dx‾…...
JavaWeb——多线程使用哈希表
目录 一、HashMap 1、定义 二、HashTable 1、定义: 2、区别: 三、ConcurrentHashMap 1、定义: 2、优化 (1)、加锁粒度不同——触发锁冲突的频率不同 (2)、充分利用CAS机制——无锁编程…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
