mysql 的 子查询

问题描述

最近在学子查询,发现有一个题目如下
要求查询出两门及两门以上不及格者的平均成绩
截图

第一想法就是
先查询出 成绩 小于 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 子查询题讨论讨论,也顺便学习学习,谢谢。

686 1 0
1个回答

nitron

答案跟你第二种写法一样的,简写了而已

年代过于久远,无法发表回答
×
🔝