GROUPING 运算符 完成数据的小计和合计。
GROUPING 运算符分三类(ROLLUP 、CUBE 、GROUPING SETS)
1. ROLLUP 运算符

再看ROLLUP例子:

分析:
ROLLUP指定多列进行分组统计的时候,拿上面的例子看经过以下步骤得出结果,
其实背后是按照先 group by () ----- > 再 group by(p.product_type) ------> 最后 group by(p.product_type,p.regist_date),最终得到的结果进行合并结果集(就是三种不同颜色统计出来的小计以及总计结果). 这里要注意一下 ROLLUP 指定列的顺序不同统计的小计是有差异的。
继续再看ROLLUP例子,先看刚刚例子出现的现象:

看 GROUPING 运算符 补充以上的例子:

尼玛是不是更看不懂了!不管,记住返回grouping 函数计算出来的值为 1 不是总计 就是 小计。
整理一下再看:

2.CUBE 运算符
CUBE 跟 ROLLUP 用法一样,直接看现象。把上面的 例子 ROLLUP 直接改成 CUBE:

可以看出 使用 CUBE 多出了几行,其实这几行是通过 regist_date 进行分组汇总得到的行。所以说,
CUBE 和 ROLLUP 的区别是在于 CUBE 会把指定的所有列进行分组汇总。 诸如:
group by () ----- > 再 group by(p.product_type) ------>再 group by(p.regist_date) ------> 最后 group by(p.product_type,p.regist_date)
3.GROUPING SETS 运算符
GROUPING SETS 其实比较简单,就是从 ROLLUP 或者 CUBE 中只取 指定列的小计结果,不取总计以及多列聚集的结果,直接看效果:

网友评论