1、where 和 having 关键字
where和having都可用于在sql语句中过滤条件,都可以和group by语句结合在一起使用。
二者的区别在于:
(1)与group by一起使用时,where在group by语句之前,代表先用where语句进行过滤,再使用group by对过滤后的结果进行分组;
而having语句只能用在group by之后,对分组后的结果进行筛选。
(2)where后的条件表达式不允许使用聚合函数,所以当需要使用聚合函数时只能放在having后面。
sql练习:查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩 -- (包括有成绩的和无成绩的)
--学生表 CREATE TABLE `Student`( `s_id` VARCHAR(20), `s_name` VARCHAR(20) NOT NULL DEFAULT ‘‘, `s_birth` VARCHAR(20) NOT NULL DEFAULT ‘‘, `s_sex` VARCHAR(10) NOT NULL DEFAULT ‘‘, PRIMARY KEY(`s_id`) ) --成绩表 CREATE TABLE `Score`( `s_id` VARCHAR(20), `c_id` VARCHAR(20), `s_score` INT(3), PRIMARY KEY(`s_id`,`c_id`) );
SELECT a.s_id 学生编号,ROUND(AVG(a.s_score),2) 平均成绩, b.s_name 学生姓名 FROM score a LEFT JOIN student b ON a.`s_id` = b.`s_id` GROUP BY a.s_id ,b.s_name HAVING AVG(a.s_score) < 60 UNION SELECT a.s_id 学生编号,0 平均成绩, a.s_name 学生姓名 FROM student a WHERE a.`s_id` NOT IN (SELECT DISTINCT score.s_id FROM score)
原文:https://www.cnblogs.com/Aug-20/p/12031258.html