https://www.cnblogs.com/Brambling/p/6721119.html
https://www.cnblogs.com/Impulse/articles/9273538.html
cube的分组组合最全,是各个维度值的笛卡尔(包含null)组合,
rollup的各维度组合应满足,前一维度为null后一位维度必须为null,前一维度取非null时,下一维度随意,
grouping sets则为自定义维度,根据需要分组即可。
grouping: 当行由 CUBE 或 ROLLUP 运算符添加时,该函数将导致附加列的输出值为 1;当行不由 CUBE 或 ROLLUP 运算符添加时,该函数将导致附加列的输出值为 0. 可以用来做总计或者小计。区分 CUBE 操作所生成的 NULL 值和从实际数据中返回的 NULL 值。
例如:
select 姓名,
case when GROUPING(姓名)=1
then ‘总计’
else
case when GROUPING(课程)=1
then ‘小计’
else 课程 end
end 课程,
sum(分数)
from #temp
group by 姓名,课程
with rollup;
这个介绍的比较好
https://blog.csdn.net/u011535508/article/details/87939181