• 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,
    ()
    )
     
     ---------------------------华丽的分割线------------------------------
    举了一个简单的例子:
    执行结果如下:
     
  • 相关阅读:
    《锋利的jQuery》补充笔记
    sass学习笔记
    《HTML5与CSS3基础教程》学习笔记 ——补充
    ajax常见问题(部分)
    html新特性(部分)
    less 笔记
    《JavaScript高级程序设计》补充笔记2
    《JavaScript高级程序设计》补充笔记1
    《CSS3秘笈》备忘录
    显示实现接口的好处c#比java好的地方
  • 原文地址:https://www.cnblogs.com/mingdashu/p/GROUPING_SETS.html
Copyright © 2020-2023  润新知