生活随笔
收集整理的這篇文章主要介紹了
Cube和Grouping 和Rollup
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
增強的聚合 Cube和Grouping 和Rollup
這幾個分析函數通常用于OLAP中,不能累加,而且需要根據不同維度上鉆和下鉆的指標統計,比如,分小時、天、月的UV數。
GROUPING SETS
在一個GROUP BY查詢中,根據不同的維度組合進行聚合,等價于將不同維度的GROUP BY結果集進行UNION ALL,
其中的GROUPING__ID,表示結果屬于哪一個分組集合。
selectuser_type,sales,count(user_id) as pv,GROUPING__ID
from order_detail
group by user_type,sales
GROUPING SETS(user_type,sales)
ORDER BY GROUPING__ID;+------------+--------+-----+---------------+--+
| user_type | sales | pv | grouping__id |
+------------+--------+-----+---------------+--+
| old | NULL | 3 | 1 |
| new | NULL | 7 | 1 |
| NULL | 6 | 1 | 2 |
| NULL | 5 | 2 | 2 |
| NULL | 3 | 2 | 2 |
| NULL | 2 | 2 | 2 |
| NULL | 1 | 3 | 2 |
+------------+--------+-----+---------------+--+selectuser_type,sales,count(user_id) as pv,GROUPING__ID
from order_detail
group by user_type,sales
GROUPING SETS(user_type,sales,(user_type,sales))
ORDER BY GROUPING__ID;+------------+--------+-----+---------------+--+
| user_type | sales | pv | grouping__id |
+------------+--------+-----+---------------+--+
| old | NULL | 3 | 1 |
| new | NULL | 7 | 1 |
| NULL | 1 | 3 | 2 |
| NULL | 6 | 1 | 2 |
| NULL | 5 | 2 | 2 |
| NULL | 3 | 2 | 2 |
| NULL | 2 | 2 | 2 |
| old | 3 | 1 | 3 |
| old | 2 | 1 | 3 |
| old | 1 | 1 | 3 |
| new | 6 | 1 | 3 |
| new | 5 | 2 | 3 |
| new | 3 | 1 | 3 |
| new | 1 | 2 | 3 |
| new | 2 | 1 | 3 |
+------------+--------+-----+---------------+--+
CUBE
根據GROUP BY的維度的所有組合進行聚合。
selectuser_type,sales,count(user_id) as pv,GROUPING__ID
from order_detail
group by user_type,sales
WITH CUBE
ORDER BY GROUPING__ID;+------------+--------+-----+---------------+--+
| user_type | sales | pv | grouping__id |
+------------+--------+-----+---------------+--+
| NULL | NULL | 10 | 0 |
| new | NULL | 7 | 1 |
| old | NULL | 3 | 1 |
| NULL | 6 | 1 | 2 |
| NULL | 5 | 2 | 2 |
| NULL | 3 | 2 | 2 |
| NULL | 2 | 2 | 2 |
| NULL | 1 | 3 | 2 |
| old | 3 | 1 | 3 |
| old | 2 | 1 | 3 |
| old | 1 | 1 | 3 |
| new | 6 | 1 | 3 |
| new | 5 | 2 | 3 |
| new | 3 | 1 | 3 |
| new | 2 | 1 | 3 |
| new | 1 | 2 | 3 |
+------------+--------+-----+---------------+--+
ROLLUP
是CUBE的子集,以最左側的維度為主,從該維度進行層級聚合。
selectuser_type,sales,count(user_id) as pv,GROUPING__ID
from order_detail
group by user_type,sales
WITH ROLLUP
ORDER BY GROUPING__ID;+------------+--------+-----+---------------+--+
| user_type | sales | pv | grouping__id |
+------------+--------+-----+---------------+--+
| NULL | NULL | 10 | 0 |
| old | NULL | 3 | 1 |
| new | NULL | 7 | 1 |
| old | 3 | 1 | 3 |
| old | 2 | 1 | 3 |
| old | 1 | 1 | 3 |
| new | 6 | 1 | 3 |
| new | 5 | 2 | 3 |
| new | 3 | 1 | 3 |
| new | 2 | 1 | 3 |
| new | 1 | 2 | 3 |
+------------+--------+-----+---------------+--+
總結
以上是生活随笔為你收集整理的Cube和Grouping 和Rollup的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。