为了说明sql分组后条件查询查询来看以学生成绩表的例子,成绩表中存储了所有课程的成绩在这种情况下,可能就需要不同课程的平均成绩也就是说,需偠对不同的成绩首先按照课程进行sql分组后条件查询sql分组后条件查询以后再进行聚合计算,得到累计信息
假设学员成绩表中有以下数据:
此时,要统计不同课程的平均分数首先把相同的CourseID都分为一组,然后把这些相同对应的分数值在使用前面的聚合函数取平均值如图所礻:
以上这种类型的查询,在SQL server中叫做sql分组后条件查询查询sql分组后条件查询查询采用Group
采用sql分组后条件查询查询的SQL语句如下:
sql分组后条件查詢查询有时候可能还要按照多个列进行sql分组后条件查询。例如成绩表中记录了每门课程内部测试的成绩。内部测试如果不及格还需要补栲补考学生最后的成绩取第一次成绩和补考成绩的平均值,如下图所示:
如果要统计内部测试的成绩表则学生的编号、内部测试的课程编号不能存在重复,两项都重复的行的分数值要去平均值因此,这是一个既按照学生编号又按照内部测试课程编号进行sql分组后条件查詢的查询
查询输出的结果如下图:
要使用Group By关键字时,在select列表中可以指定的项目是有限的select语句中仅允许以下几项。
为每个组返回一个值嘚表达式
下面继续通过案例的形式讲解sql分组后条件查询查询的具体应用过程
案例需求1: 在按照部门分类的员工表中,要查询“有多个员工的工资不低于2000 的部门编号”
?著作权归作者所有:来自51CTO博客作者乐园园的原创作品如需转载,请注明出处否则将追究法律责任
关注公众号:SQL数据库开发了解哽多SQL高级知识
是多个sql分组后条件查询的并集,用于在一个查询中按照不同的sql分组后条件查询列对集合进行聚合运算,等价于对单个sql分组後条件查询使用"UNION ALL"计算多个结果集的并集。
可以通过一条SELECT语句实现复杂繁琐的多条SELECT语句的查询并且更加的
高效,解析存储一条SQL于语句
我們以Customers表为例其内容如下:
我们先分别对城市和省份进行sql分组后条件查询,统计出他们的数量
其实上下两个结果是一样的只是UNION ALL不排序,洏GROUPING SETS增加了排序这样不仅减少了代码,而且这样的效率会比UNION ALL的效率高通常GROUPING SETS使用在组合分析中。
我们使用ROLLUP可以这样写
我们来解读一下ROLLUP的作鼡其作用是对每个列先进行一次sql分组后条件查询,并且对第一列的数据在每个组内还进行一次汇总最后对所有的数据再进行一次汇总,所以相比GROUPING SETS会多了个所以数据的汇总这个在对组内进行聚合时是经常使用到的。
而CUBE相比ROLLUP就更多一个维度了我们还是距离说明。
在ROLLUP的基礎上还会将第一列每组的汇总数据额外显示在最后。
sql分组后条件查询集类似于Excel的透视图可以对各类数据进行组内计算,这里不止可以進行数量统计也可以进行求和,最大最小值等操作是我们在进行数据分析时候经常使用到的一组功能。