mysql支持grouping sets吗

mysql支持grouping sets吗,第1张

MySQL 8.0 新增了 GROUPING() 函数,用来理清 GROUP BY with rollup 子句检索后所产生的每个分组汇总结果。 grouping 可用在分组列,having 子句以及 order by 子句。

GROUPING() 函数用来返回每个分组是否为 ROLLUP 结果,是为 1 否为 0。从结果中,很容易就能区分哪些 NULL 是正常记录,哪些是 ROLLUP 的结果。

GROUPING() 函数不仅仅是针对单个字段来统计汇总值,还可以针对多个字段。

此时会发现,GROUPING() 函数对多个字段结果并非只有 1 和 0,还有一个值为 3。在 GROUPING() 函数包含多个参数时,按照以下方式来返回结果:

GROUPING(r1,r2) 等价于 GROUPING(r2)  + GROUPING(r1) <<1

GROUPING(r1,r2,r3,...) 等价于 GROUPING(r3) + GROUPING(r2) <<1 + GROUPING(r1) <<2

以此类推

GROUPING 语句还可以用在 HAVING 子句里,比如用 GROUPING 子句来过滤掉非 ROLLUP 的结果。

sql中GROUPING用于区分标准空值和由 ROLLUP、CUBE 或 GROUPING SETS 返回的空值。作为 ROLLUP、CUBE 或 GROUPING SETS *** 作结果返回的 NULL 是 NULL 的特殊应用。它在结果集内作为列的占位符,表示全体。

扩展资料:

grouping sets是等价于带union all的group by子句,之所以是等价而不是等于,是因为它们的顺序不一样。grouping sets并不只是group by的语法糖,这两者内部的执行过程也是全然不同的,性能方面grouping sets能减少IO *** 作但会增加CPU占用时间。

另外在grouping sets中如果将括号中的参数换个位置那么结果也将改变,这说明结果集中的顺序与参数的位置也有关。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/7638475.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-08
下一篇2023-04-08

发表评论

登录后才能评论

评论列表(0条)

    保存