group by的使用
1.分类汇总
原始数据
查询各个名族分别有多少人?
select nation,count(nation) from A group by nation;
执行结果:
2.group by 多列
“多列分组”实际上就是就是按照多列合并后的值进行分组
例如:
根据nation和性别进行分组
select nation,sex,sum(score) from A group by nation,sex;
执行结果:
如上,就是将nation和sex都相同的列,进行合并,然后进行分组。
Having与Where的区别
-
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
-
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。
select nation,count(nation) from A group by nation having count(nation)>2;
Having和Where的联合使用方法
select nation,count(nation) from A where nation!='汉族' group by nation having count(nation)>1;
注意:在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。
练习:
查询每位同学的课程门数、总成绩、平均成绩
原始数据
select name,count(subject),sum(score),avg(score) from A group by name;
执行结果:
小结:
1.group by与聚合函数组合经常使用做分类汇总查询。
2.group by 多列,就是合并多列中相同的列。
3.select中指定查询的列,要么跟在group by后面作为分组依据,要么包含在聚合函数中。
4.where & group by 先过滤,再分组。having & group by 先分组,再过滤。