GROUPING 運(yùn)算符 完成數(shù)據(jù)的小計(jì)和合計(jì)。
GROUPING 運(yùn)算符分三類(lèi)(ROLLUP 安岂、CUBE 、GROUPING SETS)
1. ROLLUP 運(yùn)算符
再看ROLLUP例子:
分析:
ROLLUP指定多列進(jìn)行分組統(tǒng)計(jì)的時(shí)候,拿上面的例子看經(jīng)過(guò)以下步驟得出結(jié)果,
其實(shí)背后是按照先 group by () ----- > 再 group by(p.product_type) ------> 最后 group by(p.product_type,p.regist_date)谓罗,最終得到的結(jié)果進(jìn)行合并結(jié)果集(就是三種不同顏色統(tǒng)計(jì)出來(lái)的小計(jì)以及總計(jì)結(jié)果). 這里要注意一下 ROLLUP 指定列的順序不同統(tǒng)計(jì)的小計(jì)是有差異的。
繼續(xù)再看ROLLUP例子季二,先看剛剛例子出現(xiàn)的現(xiàn)象:
看 GROUPING 運(yùn)算符 補(bǔ)充以上的例子:
尼瑪是不是更看不懂了檩咱!不管,記住返回grouping 函數(shù)計(jì)算出來(lái)的值為 1 不是總計(jì) 就是 小計(jì)胯舷。
整理一下再看:
2.CUBE 運(yùn)算符
CUBE 跟 ROLLUP 用法一樣刻蚯,直接看現(xiàn)象。把上面的 例子 ROLLUP 直接改成 CUBE:
可以看出 使用 CUBE 多出了幾行桑嘶,其實(shí)這幾行是通過(guò) regist_date 進(jìn)行分組匯總得到的行炊汹。所以說(shuō),
CUBE 和 ROLLUP 的區(qū)別是在于 CUBE 會(huì)把指定的所有列進(jìn)行分組匯總逃顶。 諸如:
group by () ----- > 再 group by(p.product_type) ------>再 group by(p.regist_date) ------> 最后 group by(p.product_type,p.regist_date)
3.GROUPING SETS 運(yùn)算符
GROUPING SETS 其實(shí)比較簡(jiǎn)單兵扬,就是從 ROLLUP 或者 CUBE 中只取 指定列的小計(jì)結(jié)果,不取總計(jì)以及多列聚集的結(jié)果口蝠,直接看效果: