分组查询
关键字:group by 后面根列名,通常和聚合函数一起使用
聚合函数:
max(列名) --------统计该列的最大值
min(列名) --------统计该列的最大值
avg(列名) --------统计该列的平均值
sum(列名) --------统计该列的和
count(列名) ------统计该列的行数,如果该列的值是null,不统计在内
count(*) ------统计所有的列,相当于统计行数,不会忽略null
例题:查询每门课的最高分
分两步:
1、按照课程编号分成5部分,即分成5组 ------》group by
2、找出每一个组的最高分 ------》max
SELECT MAX(grade),cid FROM score GROUP BY cid;
例如:
查询考试科目小于3门课的学生
1、使用外连接连接两个表:成绩表、学生表 ,以学生表为主表
2、按sid分组
3、统计行数
4、过滤出行数大于等于3的学生 ------》having
注: 分组以后再过滤,不能用where,要用having
SELECT COUNT(grade),s.sname FROM student s LEFT JOIN score sc ON s.sid = sc.sid GROUP BY s.sid HAVING COUNT(grade) < 3 ;
总结:
语法:select 1个或多个聚合函数,分组的列名 from 表名 group by 列名 having 统计函数 比较运算符 值;
where跟在表名from的后面,是根据列来进行查询数据的 having跟在group
by的后面,是针对分组之后的数据在进行过滤查询,即根据聚合函数来查询数据