问题:查询所有成绩大于80的学生姓名?
when : 当满足条件返回1,不满足返回0,sum会求和,count统计score的个数。
having和where的区别:
- where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
- having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。
min:求最小值
group by:用指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。
SQL1:
select name from stu
group by name
having count(score) =sum(case when score>80 then 1 else 0 end )
SQL2:
select name from stu
group by name
having name not in (
select name from stu
where score <=80)
SQL3:
select name from stu
group by name
having min(score)>=80
SQL4:
select distinct name from stu where name not in (select name from stu where score <= 80)