SQL中 Group by Grouping Sets 分组的用法

文章目录

  • 1. 用法
  • 2. 语法
  • 3. 实际应用
    • 3.1 求总和与小计
    • 3.2 按多个维度分组
    • 3.3 标记小计和总计

1. 用法

将Grouping Sets 运算符添加到Group by 子句中,使用Grouping Set 可以在一个查询中指定数据的多个分组,其结果与针对指定的组执行union all 运算等效

2. 语法

SELECT column1, column2, ..., aggregate_function(column)  
FROM table_name  
GROUP BY GROUPING SETS ((column1, column2, ...), (column1), (column2), ...);

注意事项:

  • 在Group by 子句中,如果不是Grouping sets 列表的一部分,不能使用Grouping sets 进行分组。
  • 不能在Grouping sets 内部使用Grouping sets

3. 实际应用

假设现在有一个订单表 Orders ,包含订单号、顾客信息、产品和订单金额四个字段,如下图所示
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e5988c5f692642d69c85d7e03ff87ccb.png
建表语句如下:

--建表
if object_id('Orders','u') is not null drop table Orders
go
create table Orders (OrderID INT,CustomerID  INT,CustomerName varchar(20),ProductName varchar(20),SalesValue   int
)
go
insert into Orders
values
(1,1, 'Lily','打印机',908)
,(2,1,'Lily','碎纸机',560)
,(3,2,'Coco','传真机',380)
,(4,2,'Coco','打印机',710)
,(5,2,'Coco','办公桌',420)
,(6,3,'Joe','办公椅',120)
,(7,4,'Emma','碎纸机',570)
,(8,1,'Lily','碎纸机',260)
,(9,3,'Joe','办公椅',100)
go

3.1 求总和与小计

使用 Grouping Sets 可以同时计算总和和小计。
如果想要计算每个顾客的订单总金额以及每个顾客、产品的小计金额。可以使用以下查询:

select CustomerID  ,isnull(productname,'产品合计') as ProductName ,sum(salesvalue) as salevalue
from Orders
group by grouping sets ((customerid,productname),(customerid))

查询结果如下图所示:
在这里插入图片描述

3.2 按多个维度分组

3.3 标记小计和总计

在查询结果中,可以使用 CASE 语句将小计和总计的结果进行标记。如果想要计算每个顾客的订单总金额以及每个顾客、产品的小计金额;除此之外还需要计算所有订单的销售额总计,可以使用以下查询:

select CustomerID,case when grouping (customerid) = 1 then '总计'else isnull(ProductName,'产品合计') end  as ProductName,sum(salesvalue) as salevalue
from Orders
group by grouping sets ((customerid,productname),(customerid),())

查询结果如下图所示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/323456.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构基本概念

数据结构 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。它包括数据的逻辑结构、数据的存储结构和数据的基本运算。 数据的逻辑结构 数据的逻辑结构是指数据元素之间的逻辑关系。所谓逻辑关系是指数据元素之间的关联方式或“邻接关系”。 逻辑结构与数据元素本…

GeoServe本地部署结合内网穿透实现远程访问Web管理界面

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现,利用GeoServer可以方便地发布地图数据,允许用户对要素数据进行更新、删除、插入…

DevOps(8)

目录 36.当发出的命令与上次使用时产生的结果不同时,会出现什么问题? 37./usr /local的内容是什么? 38.你如何终止正在进行的流程? 39.如何在命令行提示符中插入注释? 40.什么是命令分组以及他是如何工作的&…

知虾电商(Shopee):东南亚领先电商平台的十大关键特点**

知虾电商(Shopee)作为东南亚地区领先的电子商务平台,由Sea Group(前称Garena)在2015年创立。知虾电商以移动优先的策略迅速崛起,为用户提供了一个便捷、安全的在线购物环境。以下是知虾电商的一些关键特点&…

MapInfo Pro和Python基础知识

MapInfo Pro用户长期以来一直使用MapBasic脚本语言来自动化任务、构建自定义应用程序、创建Pro的特定领域自定义、将Pro与其他工具集成等。 MapBasic主要是一种编译语言,这对非程序员来说有点障碍。 我们确实有MapBasic窗口,它允许MapBasic语句和代码直接…

MongoDB 启动时:服务名无效

1.问题场景 电脑睡眠后,再连接服务发现无法连接,启动服务报:服务名无效。 2.打开服务管理: 发现服务中没有MongoDB的服务 3.解决 (1)先找打MongoDB安装路径,把data文件夹下所有文件删除 &a…

数据分析求职-简历准备

简历在整个求职过程中的重要性不言而喻,今天咱们来聊求职过程中简历准备的那些事儿~ 1. 简历究竟有啥用 求职的流程简单说就是:网申->笔试->面试->offer 其中网申环节,简历100%决定了你的通过与否,这个点大家都知道。…

Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found

IDEA创建spring boot项目的时候,pom.xml 文件中spring-boot-maven-plugin报红。 解决方法: 给spring-boot-maven-plugin指定版本 原因: idea自动找的插件版本是其他版本的,和自己设置的不同,导致idea在本地maven仓库…

十、基本对话框大集合(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 Qt提供了很多标准的对话框。例如标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框 (QFontDialog)、标准输入对话框 (QInputDialog) 及消息对话框 (QMessageBox)。本文展示各…

[每周一更]-(第50期):Go的垃圾回收GC

参考文章: https://juejin.cn/post/7111515970669117447https://draveness.me/golang/docs/part3-runtime/ch07-memory/golang-garbage-collector/https://colobu.com/2022/07/16/A-Guide-to-the-Go-Garbage-Collector/https://liangyaopei.github.io/2021/01/02/g…

详细解读QLC SSD无效编程问题-1

此前小编关于QLC SSD有过多篇文章,具体参考如下: 为什么QLC NAND才是ZNS SSD最大的赢家? HDD与QLC SSD深度对比:功耗与存储密度的终极较量 QLC SSD在数据中心的发展前景如何? 多维度深入剖析QLC SSD硬件延迟的来源 …

肠道炎症与年龄和阿尔茨海默病病理学相关:一项人类队列研究

谷禾健康 ​阿尔茨海默 研究表明,慢性低水平的炎症(“炎症衰老”)可能是年龄相关疾病的一个介导因素,而肠道微生物通过破坏肠道屏障可能会促进炎症。 虽然老化和阿尔茨海默病(AD)与肠道微生物群组成的改变有…