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

oracle-函数-grouping sets(x1,x2,x3...)的妙用

GROUPING SETS 允许你为多个列组合生成分组汇总。它类似于多个 GROUP BY 子句的 UNION ALL 操作,但更加简洁和高效

首先:创建表及接入测试数据


create table students
(id number(15,0),
area varchar2(10),
stu_type varchar2(2),
score number(20,2));
insert into students values(1, '111', 'g', 80 );
insert into students values(1, '111', 'j', 80 );
insert into students values(1, '222', 'g', 89 );
insert into students values(1, '222', 'g', 68 );
insert into students values(2, '111', 'g', 80 );
insert into students values(2, '111', 'j', 70 );
insert into students values(2, '222', 'g', 60 );
insert into students values(2, '222', 'j', 65 );
insert into students values(3, '111', 'g', 75 );
insert into students values(3, '111', 'j', 58 );
insert into students values(3, '222', 'g', 58 );
insert into students values(3, '222', 'j', 90 );
insert into students values(4, '111', 'g', 89 );
insert into students values(4, '111', 'j', 90 );
insert into students values(4, '222', 'g', 90 );
insert into students values(4, '222', 'j', 89 );
commit;

sql示例:

select id, area, stu_type, sum(score) score
from students
group by grouping sets((id, area, stu_type), (id, area), id)
order by id, area, stu_type;
  1. (id, area, stu_type):按照 idarea 和 stu_type 三个字段进行分组,求出每个分组的 score 总和。
  2. (id, area):按照 id 和 area 两个字段进行分组,求出每个分组的 score 总和。
  3. id:仅按照 id 字段进行分组,求出每个分组的 score 总和。

GROUPING SETS 等效于 UNION ALL 的写法 

select * from (
    select id, area, stu_type, sum(score) from students group by id, area, stu_type
    union all
    select id, area, null, sum(score) from students group by id, area
    union all
    select id, null, null, sum(score) from students group by id
) order by id, area, stu_type;

 总结:

  • GROUPING SETS 是一种非常强大的 SQL 分组和聚合工具,它让我们能够在同一个查询中对多种不同的列组合进行聚合,避免了重复编写多个 GROUP BY 子句的麻烦,并且比使用 UNION ALL 更加高效。理解 GROUPING SETS 可以帮助我们在分析数据时获得更多层次的汇总信息。
  • GROUPING SETS:提供了最大的灵活性,允许你指定任意的列组合进行分组汇总。你可以精确地控制哪些列组合需要进行聚合,而不像 ROLLUPCUBE 那样会自动生成所有的汇总维度。


http://www.kler.cn/a/387159.html

相关文章:

  • linux安装netstat命令
  • go T 泛型
  • 【时间之外】IT人求职和创业应知【34】-人和机器人,机器人更可靠
  • 计算机新手练级攻略——如何搜索问题
  • 【C++】详细介绍模版进阶,细节满满
  • VCSVerdi:KDB文件的生成和导入
  • Go语言开发商城管理后台-GoFly框架商城插件已发布 需要Go开发商城的朋友可以来看看哦!
  • 【wpf】ResourceDictionary 字典资源的用法
  • 系统架构师2023版:习题
  • 七大AI知识库工具概览
  • 搜维尔科技:【煤矿虚拟仿真】煤矿企业、高校、科研单位-多语言支持、数字孪生、交互式学习体验
  • Windows10 下通过 Visual Studio2022 编译 openssl 3.4
  • go语言使用总结(持续更新)
  • 前端开发利器:npm 软链接
  • MYSQL-显示错误信息ERRORS 的语句(十七)
  • 软件项目整体实施方案,从立项到交付验收完整过程实施方案,软件实施方案(word原件)
  • [241110] 微软发布多智能体系统Magentic-One | 社区讨论:Ubuntu 26.04 LTS 发布前移除 Qt 5
  • 【MATLAB代码】二维平面上的TDOA,使用加权最小二乘法,不限制锚点数量,代码可复制粘贴
  • 24-11-9-读书笔记(三十二)-《契诃夫文集》(六)上([俄] 契诃夫 [译] 汝龙)药品是甜的,真理是美的,咖啡是苦的,生活是什么啊?
  • 【ChatGPT】如何通过问题链条优化ChatGPT的思维逻辑
  • 高效共享出行:基于SpringBoot的汽车管理系统
  • MySQL之索引(1)(索引概念与作用、红黑树、b树、b+树)(面试高频)
  • A12S25-A2-RH,A12A35-A2-RH 安霸ABMBRELLA 图像传感器汽车记录主控芯片 在售
  • Linux中.NET读取excel组件,不会出现The type initializer for ‘Gdip‘ threw an exception异常
  • 【51单片机输出50ms与200ms方波】
  • Mysql命令大全