编写SQL查询获取全部5门科目及格及至少2门及格的学生
学生成绩SQL查询需求
数据表(student_scores)
| SNO | SNAME | SUBJECT | MARKS | RESULT |
|---|---|---|---|---|
| 100 | Ramesh | MATHS | 90 | PASS |
| 100 | Ramesh | PHYSICS | 82 | PASS |
| 100 | Ramesh | CHEMISTRY | 99 | PASS |
| 100 | Ramesh | BIOLOGY | 34 | FAIL |
| 100 | Ramesh | ZOOLOGY | 60 | PASS |
| 200 | Saran | MATHS | 75 | PASS |
| 200 | Saran | PHYSICS | 32 | FAIL |
| 200 | Saran | CHEMISTRY | 28 | FAIL |
| 200 | Saran | BIOLOGY | 30 | FAIL |
| 200 | Saran | ZOOLOGY | 31 | FAIL |
| 300 | Gokul | MATHS | 75 | PASS |
| 300 | Gokul | PHYSICS | 65 | PASS |
| 300 | Gokul | CHEMISTRY | 78 | PASS |
| 300 | Gokul | BIOLOGY | 67 | PASS |
| 300 | Gokul | ZOOLOGY | 56 | PASS |
1. 查询所有通过全部5门科目的学生的SNO和SNAME
方法一:统计通过科目数
SELECT SNO, SNAME FROM student_scores GROUP BY SNO, SNAME HAVING COUNT(CASE WHEN RESULT = 'PASS' THEN 1 END) = 5;
方法二:排除有不及格科目的学生
SELECT DISTINCT SNO, SNAME FROM student_scores WHERE SNO NOT IN ( SELECT SNO FROM student_scores WHERE RESULT = 'FAIL' );
两种方法都会返回唯一符合条件的学生:SNO=300,SNAME=Gokul
2. 查询所有通过至少2门科目的学生的SNO和SNAME
SELECT SNO, SNAME FROM student_scores GROUP BY SNO, SNAME HAVING COUNT(CASE WHEN RESULT = 'PASS' THEN 1 END) >= 2;
查询结果包含:Ramesh(通过4门)和Gokul(通过5门),Saran仅通过1门,不在结果内。
内容的提问来源于stack exchange,提问作者Darshan
相关产品推荐
相关产品推荐

