最近在学子查询,发现有一个题目如下
要求查询出两门及两门以上不及格者的平均成绩
第一想法就是
先查询出 成绩 小于 60 的所有人 再进行子查询
SELECT `name`,avg(score) avg FROM score WHERE `name` IN ( SELECT `name` FROM score WHERE score < 60 GROUP BY `name` HAVING COUNT(name) >= 2 ) GROUP BY name
再想想,好像有点复杂了。
第二次,想能不能把不及格的成绩统计起来,再进行筛选
SELECT `name`,AVG(score)avg,SUM(IF(score<60,1,0)) c FROM score GROUP BY `name` HAVING c >= 2
看了答案, 比我的第二种方案还要好
SELECT `name`,AVG(score) avg,SUM(score<60) c FROM score GROUP BY `name` HAVING c >= 2
提问:有没有更简单 或者更复杂的 sql 提供参考。或者大佬们提供相关的 sql 子查询题讨论讨论,也顺便学习学习,谢谢。
答案跟你第二种写法一样的,简写了而已
原来是这样,谢谢回答