以上三种在数据汇总统计时经常用到,我尝试以简明易懂地总结出其使用方法和意义
GROUP BY ROLLUP(c1,c2,c3...cN) 分级汇总
1. 汇总从左到右逐级降低,最精细的汇总数据是根据最右的列得到
2. 根据c1得到全部汇总->再根据c2细分汇总->...->根据cN得到最精细汇总。
采购进货表Purchase(货品ID,数量,价格,类型,日期,供应商 )
SELECT MONTH(日期),类型,供应商 ,SUM( 价格)
FROM Purchase
GROUP BY ROLLUP(MONTH(日期),类型,供应商)
汇总的条件包括4种:
(所有),(MONTH(日期)),(MONTH(日期),类型),(MONTH(日期),类型,供应商)
条件对应的结果集:
得到总采购额汇总,根据日期得到每月采购额汇总,各个月中不同类型商品的采购额的单项汇总,每月中每个类型的商品分别由不同供应商的供货额。
GROUP BY CUBE(c1,c2,c3...Cn) 获取所有聚合值的超集,换句话说,就是生成的结果集包括所有可能的聚合情况(所有维度)
SELECT MONTH(日期),类型,供应商 ,SUM( 价格)
FROM Purchase
GROUP BY CUBE(MONTH(日期),类型,供应商)
汇总条件包括7种:
(所有),(MONTH(日期)),(类型),(供应商),(MONTH(日期),类型),
(MONTH(日期),供应商),(类型,供应商)
条件对应结果集包括:
采购总额的汇总,各个月份的采购额汇总,各类型商品的采购额汇总,不同供应商的采购总额,每个月不同类型商品的采购额,每个月不同供应商的采购额,每个类型商品不同供应商的采购额。
GROUP BY GROUPING SETS(c1,c2,c3...cN)指定不同的汇总列,合并结果到一个结果集。类似多个汇总结果用UNION ALL拼起来。
SELECT MONTH(日期),类型,供应商 ,SUM( 价格)
FROM Purchase
GROUP BY GROUPING SETS(MONTH(日期),类型,供应商)
()条件表示,所有汇总。还可以将多个列组合成一个分组条件,如((c1,c2),c3)
汇总条件:
(MONTH(日期)),(类型),(供应商),分别得到结果,然后合并到一个返回结果集中。
意义:
一个结果集输出,多个分组汇总的合并结果集。各月采购额+各类型商品采购额+各供应商采购额。