SQL之Group By

SQL中的Group By是用来分组的,虽然用起来很简单,但是也有一点注意事项。

测试数据表:

 

1、简单分组:

select
sc.SID
from Score sc group by sc.SID

2、统计每个组的元素个数:

select
sc.SID,count(*)
from Score sc group by sc.SID

3、统计每个组的某个字段的聚合(sum,avg)

select
sc.SID,sum(sc.CID)
from Score sc group by sc.SID

4、多列分组:同时满足多个列进行分组

select
sc.SID,sc.CID ,count(1)
from Score sc group by sc.SID,sc.CID

 5、having和where的区别:

  • where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
  • having 子句的作用是筛选满足条件的组,即在分组之后过滤数据条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。

select
sc.SID,count(*)
from Score sc where sc.SID>1 group by sc.SID having sum(sc.Score)>50 and sum(sc.Score)<150

 

注意:在select指定的分组字段绝对不可以比Group By 的字段要多,也就是说要么就要包含在Group By语句的后面(2者保持一致),作为分组的依据;要么就要被包含在聚合函数中。

 

这是错误的!

select
sc.SID,sc.CID
from Score sc group by sc.SID    

而这样就是正确的!默认是按照最后一个分组的字段(CID)的升序排列的

select
sc.SID
from Score sc group by sc.SID,sc.CID

 

 

posted on 2017-02-08 16:13  奔游浪子  阅读(110)  评论(0)    收藏  举报

导航