我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ROLLUP,CUBE,GROUPING SETS,grouping_id()函数有什么用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ROLLUP,CUBE,GROUPING SETS,grouping_id()函数有什么用

小编给大家分享一下ROLLUP,CUBE,GROUPING SETS,grouping_id()函数有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1.ROLLUP

group by rollup(1,2,3), 可以理解为从右到左以一次少一列的方式依次进行group by。

例如: group by rollup(1,2,3) 则以group by(1,2,3) -> group by(1,2) -> group by(1) -> group by null(最终汇总)的顺序进行分组

相当于:

Select A,B,C,sum(E) from test group by A,B,C
union all
Select A,B,null,sum(E) from test group by A,B
union all
Select A,null,null,sum(E) from test group by A
union all
Select null,null,null,sum(E) from test;

2.CUBE

group by cube(1,2,3), 需要对每一列的排列组合进行group by

例如: group by cube(1,2,3) 则以 group by(1,2,3) -> (1,2) -> (1,3) -> (2,3) -> (2) -> (3) -> group by null(最终汇总)的顺序进行分组

相当于:

Select A,B,C,sum(E) from test group by A,B,C
union all
Select A,B,null,sum(E) from test group by A,B
union all
Select A,null,C,sum(E) from test group by A,C
union all
Select A,null,null,sum(E) from test group by A
union all
Select null,B,C,sum(E) from test group by B,C
union all
Select null,B,null,sum(E) from test group by B
union all
Select null,null,C,sum(E) from test group by C
union all
Select null,null,null,sum(E) from test;

3.GROUPING SETS

自定义分组方案

group by GROUPING SETS(1,2,3)  = (1),(2),(3) 分别group by

group by grouping sets((1,2),3) = (1,2),(3) 分别group by


4.组合应用

group by A,rollup(A,B)

将对所有group by 后面的集合进行笛卡尔积

因此顺序为: (A,(A,B)),(A,A),(A,NULL) = (A,B),(A),(A)

Select A,B,sum(E) from test1 group by A, rollup(A,B);

Select A,B,sum(E) from test1 group by A,B
Union all
Select A,null,sum(E) from test1 group by A
Union all
Select A,null,sum(E) from test1 group by A;


5.GROUPING_ID()

即GROUPING函数用于区分分组后的普通行和聚合行。如果是聚合行,则返回1,反之,则是0。

GROUPING_ID是GROUPING的增强版,与GROUPING只能带一个表达式不同,它能带多个表达式。

SELECT TO_CHAR (log_date, 'YYYY') year,
         TO_CHAR (log_date, 'Q') quarter,
         TO_CHAR (log_date, 'MM') month,
         employee_id,
         MIN (old_salary),
         MIN (new_salary),
         GROUPING_ID (TO_CHAR (log_date, 'YYYY'),
                      TO_CHAR (log_date, 'Q'),
                      TO_CHAR (log_date, 'MM'))
            gid
    FROM plch_emp_log
GROUP BY ROLLUP (TO_CHAR (log_date, 'YYYY'),
                 TO_CHAR (log_date, 'Q'),
                 TO_CHAR (log_date, 'MM')),
         employee_id;


YEAR     QU MONT EMPLOYEE_ID MIN(OLD_SALARY) MIN(NEW_SALARY)        GID
-------- -- ---- ----------- --------------- --------------- ----------
2010     1  01           100            1000            1800          0
2010     1               100            1000            1800          1
2010     2  04           100            1800            1900          0
2010     2               100            1800            1900          1
2010     3  09           100            1900            1500          0
2010     3               100            1900            1500          1
2010                     100            1000            1500          3
2011     1  01           100            1500            2500          0
2011     1               100            1500            2500          1
2011     2  04           100            2500            2200          0
2011     2               100            2500            2200          1

YEAR     QU MONT EMPLOYEE_ID MIN(OLD_SALARY) MIN(NEW_SALARY)        GID
-------- -- ---- ----------- --------------- --------------- ----------
2011                     100            1500            2200          3
                         100            1000            1500          7
2010     1  01           200            1000            1600          0
2010     1  03           200            1600            2500          0
2010     1               200            1000            1600          1
2010     2  05           200            2500            2300          0
2010     2               200            2500            2300          1
2010     3  09           200            2300            3000          0
2010     3               200            2300            3000          1
2010                     200            1000            1600          3
2011     1  02           200            3000            2000          0

YEAR     QU MONT EMPLOYEE_ID MIN(OLD_SALARY) MIN(NEW_SALARY)        GID
-------- -- ---- ----------- --------------- --------------- ----------
2011     1               200            3000            2000          1
2011     3  07           200            2000            2800          0
2011     3               200            2000            2800          1
2011                     200            2000            2000          3
                         200            1000            1600          7
2010     2  04           300            1000            2000          0
2010     2  05           300            2000            3000          0
2010     2               300            1000            2000          1
2010     4  10           300            3000            2700          0
2010     4               300            3000            2700          1
2010                     300            1000            2000          3

YEAR     QU MONT EMPLOYEE_ID MIN(OLD_SALARY) MIN(NEW_SALARY)        GID
-------- -- ---- ----------- --------------- --------------- ----------
2011     1  02           300            2700            2500          0
2011     1               300            2700            2500          1
2011     3  09           300            2500            2900          0
2011     3               300            2500            2900          1
2011                     300            2500            2500          3
                         300            1000            2000          7

39 rows selected.

以上是“ROLLUP,CUBE,GROUPING SETS,grouping_id()函数有什么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ROLLUP,CUBE,GROUPING SETS,grouping_id()函数有什么用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

sql rollup函数的作用是什么

SQL中的ROLLUP函数是一种用于在聚合query中生成多维度总计的函数。它可以在GROUP BY子句中的列上创建多级总计,并在结果集中生成子组的总计值。ROLLUP函数可以创建从最粗到最细的层次结构的聚合总计。通过使用ROLLUP函数,
sql rollup函数的作用是什么
2024-04-09

sql rollup函数的用法是什么

ROLLUP函数是SQL中用于在GROUP BY子句中生成合计行的函数。它可以在GROUP BY子句中的列上创建一个合计行,从而提供总计、小计和详细数据的不同级别的总计。ROLLUP函数可以用于一次生成多个合计行,这些合计行是从右到左生成的
sql rollup函数的用法是什么
2024-04-09

SQLServer 错误 8710 必须提供与 CUBE、ROLLUP 或 GROUPING SET 查询一起使用的聚合函数,才能合并子聚合。 若要修复此问题,请删除该聚合函数或在 GROUP BY

详细信息 Attribute 值 产品名称 MSSQLSERVER 事件 ID 8710 事件源 MSSQLSERVER 组件 SQLEngine 符号名称 QUERY2_CUBE_ILLEGAL_AGG_FUNC ...
SQLServer 错误 8710 必须提供与 CUBE、ROLLUP 或 GROUPING SET 查询一起使用的聚合函数,才能合并子聚合。 若要修复此问题,请删除该聚合函数或在 GROUP BY
2023-11-05

PHP file_get_contents()函数有什么用

PHP file_get_contents()函数用于将文件的内容读取到一个字符串中。它可以从本地文件系统、网络URL、流数据等读取文件内容。这个函数是一个简单而强大的文件读取函数,可以用于读取文本文件、JSON数据、XML数据等。下面是一
2023-10-10

MySQL FROM_UNIXTIME() 函数有什么用?

MySQL FROM_UNIXTIME() 函数用于从 Unix 时间戳版本返回日期/日期时间。返回值的格式可以是“YYYY-MM-DD HH:MM:SS”或“YYYYMMDDHHMMSS.uuuuuu”,具体取决于函数的上下文,即上下文是
2023-10-22

MySQL FROM_UNIXTIME() 函数有什么用

MySQL的FROM_UNIXTIME()函数用于将Unix时间戳转换为日期和时间格式。Unix时间戳是从1970年1月1日00:00:00 UTC到指定时间的秒数。FROM_UNIXTIME()函数可以将这个秒数转换为MySQL支持的日期
2023-10-20

mysql last_insert_id函数有什么用

MySQL的last_insert_id()函数用于返回最近一次插入操作所生成的自增长主键值。通常在插入数据后,可以使用该函数获取自增长主键值,以便在需要时进行进一步的操作或记录。这个函数可以帮助开发人员快速获取最新插入记录的主键值,而不用
mysql last_insert_id函数有什么用
2024-03-07

sql timestampdiff函数有什么用

TIMESTAMPDIFF函数用于计算两个日期或时间的差值。它可以计算两个日期、时间或日期时间之间的差值,并以指定的单位返回结果,如年、月、日、小时、分钟等。这个函数在SQL中非常有用,可以帮助用户计算日期和时间之间的差异,从而进行更复杂的
sql timestampdiff函数有什么用
2024-04-09

MySQL TRUNCATE() 函数有什么用?

MySQL TRUNCATE() 函数用于返回 X 截断至 D 位小数的值。如果D为0,则去除小数点。如果D为负数,则D个值的整数部分被截断。其语法如下 -语法TRUNCATE(X, D)此处X 是要截断的数字。D 是小数点后的数字。数字
2023-10-22

MySQL LAST_INSERT_ID() 函数有什么用?

MySQL LAST_INSERT_ID() 函数用于通过 AUTO_INCRMENT 获取最近生成的序列号。示例在这个示例中,我们是创建一个名为“Student”的表,该表具有 AUTO_INCRMENT 列。我们在“Name”列中插入两
2023-10-22

php函数chown有什么用

这篇文章将为大家详细讲解有关php函数chown有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在php中,chown()函数可以设置指定文件的所有者,如果成功则返回TRUE,否则返回FALSE;语
2023-06-20

编程热搜

目录