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

浙公网安备 33010602011771号