在sql sever2012中group by子句实例

今天学习sql sever练习了group by语句。基本语法:group by 分组表达式 with cube|rollup

group by中的列必须与select中的列名相同,从而进行分组。

group by进行多列分组按后面字段的优先级进行排列,即

group by a,b 先根据A排列,在根据B排列。依此同理

如果用with cube 在返回结果后不仅包含group by 的正常行还包含所有可能的组的汇总行,汇总行在结果中显示为NULL

如果用with rollup 在返回结果不仅包含正常行,还包含按层次结构顺序排列的汇总行

具体实例:

本练习中数据库school包含student、teacher、course、score四个表,具体如下

在sql sever2012中group by子句实例在sql sever2012中group by子句实例

在sql sever2012中group by子句实例在sql sever2012中group by子句实例

先搜索每班每门课的平均成绩,可:

在sql sever2012中group by子句实例

其结果为:

在sql sever2012中group by子句实例

如果加上with cube

在sql sever2012中group by子句实例

结果为:

在sql sever2012中group by子句实例

总共为10 行,它把每门课的平均成绩(1-3行)、每个班的平均成绩(5、10行)、所有人的平均成绩(4行)、每个班每门课的平均成绩(6-9行)全部显现出来。

如果用with rollup

其结果为:

在sql sever2012中group by子句实例

共7行主要按照组内由最低级别到最高级别进行汇总,组的层次结构主要取决与指定组列的顺序。如果交换分组顺序如:

在sql sever2012中group by子句实例

其结果为:

在sql sever2012中group by子句实例