SQL GROUP BY GROUPING SETS,ROLLUP,CUBE(需求举例)


 实现按照不同级别分组统计

关于GROUP BY 中的GROUPING SETS,ROLLUP,CUBE 从需求的角度理解会更加容易些。

需求举例:

假如一所学校只有两个系,

每个系有两个专业,

每个专业有两个班,

须在需要一张按照不同级别统计学生人数的报表

例如:

系别 专业 班级 学生人数
1系      
  专业1    
    班级1  
    班级2  
  专业2    
    班级1  
    班级2  
2系      
  专业1    
    班级1  
    班级2  
  专业2    
    班级1  
    班级2  

首先想到的方法就是,按照不同界别去GROUP BY 然后union到一起,

而GROUPING SETS,ROLLUP,CUBE就类似的实现了这种功能,使编码更简洁。

  •  GROUPING sets 

1, GROUPING sets(1,2)等效于

  SELECT 1,COUNT FROM dummy GROUP BY 1

  UNION ALL

  SELECT 2,COUNT FROM dummy GROUP BY 2

  •  ROLLUP
2, ROLLUP(1,2,3)等效于

  GROUPING SETS(

(1,2,3), 

(1,2), 

1,

() 

  • CUBE

3, CUBE(1,2,3)等效于

  GROUPING SETS( (1,2,3), (1,2), (1,3), (2,3), 1, 2, 3, () )    ---------------------------华丽的分割线------------------------------ 举了一个简单的例子: 执行结果如下: