当前位置: 首页 > news >正文

「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 中选择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 列的值输出到控制台屏幕。斜杠符号表示将每个记录的值输出到新的行


聚合函数简介

在这里插入图片描述
  在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】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后端的开发语言A…...

容器-LinkedList

LinkedList LinkedList的概述 LinkedList的底层使用双向链表实现。 链表是一种线性数据结构&#xff0c;其中每个元素都是一个单独的对象&#xff0c;包含一个指向列表中下一个节点的引用。 它可以用于实现各种抽象数据类型&#xff0c;例如列表、堆栈、队列等。 LinkedLis…...

Flask 路由和视图函数

Flask 路由和视图函数一、路由 (Routing)二、视图函数 (View Functions)三、动态路由四、HTTP方法五、总结在Flask中&#xff0c;路由和视图函数是两个核心概念&#xff0c;它们协同工作以处理用户请求并生成响应。一、路由 (Routing) 路由是URL到Python函数的映射。当用户访问…...

Linux主机 SSH 通过密钥登录

我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器。但是&#xff0c;一般的密码方式登录&#xff0c;容易有密码被暴力破解的问题。所以&#xff0c;一般我们会将 SSH 的端口设置为默认的 22 以外的端口&#xff0c;或者禁用 root 账户登录。其实&#xff0c;有一个更…...

中国信息安全测评中心-自主原创测评

信息技术产品自主原创测评是适应我国经济社会发展的需要&#xff0c;是适应国际知识产权保护的发展趋势&#xff0c;鼓励信息技术产业的自主创新和维护权利人合法权益的重要举措。 信息技术产品自主原创测评业务是指在开发者自主声明的基础上&#xff0c;通过对关键技术实现的全…...

redis杂谈之部分重同步的实现

背景&#xff1a; 部分重同步则用于处理断线后重复制情况&#xff1a;当从服务器在断线 后重新连接主服务器时&#xff0c;如果条件允许&#xff0c;主服务器可以将主从服务器连 接断开期间执行的写命令发送给从服务器&#xff0c;从服务器只要接收并执行这 些写命令&#xff…...

多态部分参考答案

一、选择题 1、下列关于动态联编的描述中&#xff0c;错误的是&#xff08;&#xff09;。 A&#xff0e;动态联编是以虚函数为基础 B&#xff0e;动态联编是运行时确定所调用的函数代码的 C&#xff0e;动态联编调用函数操作是指向对象的指针或对象引用 D&#xff0e;动态联编…...

【高项】项目人力资源管理,沟通管理与干系人管理(十大管理)

【高项】项目人力资源管理&#xff0c;沟通管理与干系人管理&#xff08;十大管理&#xff09; 文章目录1、人力资源管理1.1 什么是人力资源管理&#xff1f;1.2 如何进行人力资源管理&#xff1f;&#xff08;过程&#xff09;1.3 人力资源管理工具1.4 人力资源管理文件2、沟通…...

Wikijs简介-强大可扩展的开源维基软件

Wikijs - 最强大 最可扩展的开源维基软件 使用 wiki.js 美丽直观的界面&#xff0c;让文档成为写作的乐趣&#xff01; 优点 &#x1f527; 随时随地安装 几乎适用于任何平台&#xff0c;并与PostgreSQL、MySQL、MariaDB、MS SQL Server 或 SQLite 兼容&#xff01; ⚙️ 管…...

微博舆情分析系统的设计与实现(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++学习篇(十九)-- 动画蒙太奇初级使用

用一个第三人称的射击案例来简单介绍一下动画蒙太奇的使用&#xff0c;动画蒙太奇的具体介绍这里就不多说了&#xff0c;不知道的小伙伴可以去搜一下了解。 这里介绍角色射击&#xff0c;射击的时候播放一个射击动画。 选中需要创建出动画蒙太奇的动画&#xff0c;点击创建&am…...

子集和问题

目录 子集和问题 程序设计 程序分析 子集和问题 【问题描述】子集和问题的一个实例为〈S,c〉。其中,S={ x1 , x2 ,…,xn }是一个正整数的集合,c是一个正整数。子集和问题判定是否存在S的一个子集S1,使得: 试设计一个解子集和问题的回溯法。 对于给定的正整数的集…...

苹果蓝牙耳机太贵了买哪个替代?苹果蓝牙耳机平替推荐

随着人们生活水平的提高&#xff0c;蓝牙耳机已经遍布在我们生活的各个角落。同时随着科技的发展&#xff0c;许多人果粉选择苹果耳机平替。下面我们一起来看看2023年有哪些适用于苹果的平替蓝牙耳机吧&#xff01; 一、南卡小音舱Lite2蓝牙耳机 蓝牙版本&#xff1a;5.3 售…...

CK-UR05-US桌面式超高频RFID发卡器开发手册之USB控制命令格式

CK-UR05-US桌面式超高频RFID发卡器支持USB控制命令格式&#xff0c;本文重点就此格式展开说明&#xff01; CK-UR05-US桌面式超高频RFID发卡器1、取版本号(GetReaderVersion) 功能:取读写器的硬件、软件版本 命令码: 02H 命令参数:无 命令包: 『40H 02H 02H BCH』 举例: 如…...

【华为OD机试】1025 - 字符串加解密

文章目录一、题目&#x1f538;题目描述&#x1f538;输入输出&#x1f538;样例1二、代码参考作者&#xff1a;KJ.JK&#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x…...

阿里云版GPT官宣,我们问了它10个问题

4月7日&#xff0c;阿里云宣布自研大模型“通义千问”&#xff0c;目前已开始邀请用户测试体验。 阿里达摩院在NLP自然语言处理等前沿科研领域早已布局多年&#xff0c;并于2019年启动大模型研发&#xff0c;通义千问便是其最新成果&#xff0c;相当于阿里云版的“ChatGPT”。 …...

ORM框架之NHibernate

什么是NHibernate NHibernate是一个开源的对象关系映射&#xff08;ORM&#xff09;框架&#xff0c;它允许开发人员使用面向对象的方式来访问关系型数据库。它是Hibernate框架的C#版本&#xff0c;Hibernate框架是Java平台上的ORM框架。 使用NHibernate&#xff0c;您可以将…...

凑微分练习

前言 在学习第一类换元法&#xff08;凑微分法&#xff09;时&#xff0c;我们常常需要凑微分。为了更加熟练地运用凑微分法&#xff0c;下面有几道凑微分例题供大家练习。 记住df(x)f′(x)dxdf(x)f(x)dxdf(x)f′(x)dx 例题1 dx‾d(ax)dx\underline{\quad}d(ax)dx​d(ax)dx‾…...

JavaWeb——多线程使用哈希表

目录 一、HashMap 1、定义 二、HashTable 1、定义&#xff1a; 2、区别&#xff1a; 三、ConcurrentHashMap 1、定义&#xff1a; 2、优化 &#xff08;1&#xff09;、加锁粒度不同——触发锁冲突的频率不同 &#xff08;2&#xff09;、充分利用CAS机制——无锁编程…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...