group by
group by 条件完了 其它列配合 count(*) max(column) min(column) 这些使用
一个SQL查询出每门课程的成绩都大于80的学生姓名
name kecheng fenshu
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90
SELECT S.name
FROM Student S
GROUP BY S.name
Having MIN(S.fenshu)>=80
逆向思维
先找出小于80分的学生的姓名,然后不在小于80分的结果集 就是最终结果
select DISTINCT name from Student t where not EXISTS(
select 'x' from Student v where v.name=t.name and v.fenshu<80
)
求学生最高分数
t_score
t_class
求每个班的最大值 max(score)的使用
select c.name, s.score, s.name
from t_score s
INNER JOIN t_class c on s.class_id = c.id
INNER JOIN (SELECT class_id, max(score) as maxscore
from t_score
GROUP BY class_id) w on w.class_id = c.id
where s.score = w.maxscore