sql for sql server_ group by 详解

原创
2017/02/08 16:09
阅读数 178

本节主要讲解group by的基本用法:

如果要用到group by 一般用到的就是“每这个字” 例如说明现在有一个这样的表:每个部门有多少人 就要用到分组的技术。

group by (分组查询)的字面意思是根据一定的依据将一个数据集进行分组。其有一个原则,就是select后面的字段若不使用聚合函数,则必须出现在group by后面(必须!!!)。

例如,如下数据库表table:   

A B
a 1
b 1
b 1
c 2

要求:每个A中有多少个B?

错误sql:select A ,B from table group by A要求:(B既不在聚合函数中,也不在group by后面)

正确sql:select A,count(B) as number from table group by A

结果集:

A number
a 1
b 2
c 1

 

除了以上基础外,在使用group by的过程中还会遇到使用where和having进行条件筛选的情况,下面我们来介绍下它们的具体用法:

 

having子句是筛选分组后的各组数据,where子句是分组前先筛选记录,其作用在GROUP BY 子句和HAVING子句前。having子句限制的是组,而不是行,where筛选的是行记录。

 下面举例说明,如上文给出的示例:

     select A,count(B) as number from table where B !=2 group by A

 where字句在分组之前执行,排除 A=c的记录,结果如下表,

A number
a 1
b 2

      select A,count(B) as number from table  group by A  having  count(B) =1

     having在分组之后执行,只保留number=1的组,结果如下表,

A number
a 1
c 1

总结:在同时包含where和having字句的group by语句中,各语句的执行顺序是:

    执行where子句查找符合条件的数据--->使用group by 子句对数据进行分组--->对group by 子句形成的组运行聚集函数计算每一组的值--->最后用having 子句去掉不符合条件的组

最后一个小问题--->分组排序问题--->在group by分组的基础上用order by 排序 (ASC升序、DESC降序)

 

展开阅读全文
打赏
1
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部