如何筛选至少4门科目取得A1或A2的学生?求对应SQL查询语句
筛选至少4门科目取得A1/A2等级的学生SQL方案
没问题,针对你这个需求,我来提供一个通用的SQL解决方案,先假设你的学生成绩表名为student_scores,科目列分别为subject1、subject2、subject3、subject4、subject5、subject6(你可以根据实际列名替换)。
核心思路
我们需要统计每个学生中成绩为A1或A2的科目数量,然后筛选出数量≥4的学生。这里用CASE语句来标记每门科目是否符合条件,再通过SUM函数汇总符合条件的科目数,最后用HAVING子句过滤出满足要求的学生。
完整SQL查询语句
SELECT student_id, student_name FROM student_scores GROUP BY student_id, student_name HAVING ( SUM(CASE WHEN subject1 IN ('A1', 'A2') THEN 1 ELSE 0 END) + SUM(CASE WHEN subject2 IN ('A1', 'A2') THEN 1 ELSE 0 END) + SUM(CASE WHEN subject3 IN ('A1', 'A2') THEN 1 ELSE 0 END) + SUM(CASE WHEN subject4 IN ('A1', 'A2') THEN 1 ELSE 0 END) + SUM(CASE WHEN subject5 IN ('A1', 'A2') THEN 1 ELSE 0 END) + SUM(CASE WHEN subject6 IN ('A1', 'A2') THEN 1 ELSE 0 END) ) >= 4;
代码细节解释
CASE WHEN ... THEN 1 ELSE 0 END:对单门科目做条件判断,成绩是A1/A2就记1分,不符合记0分SUM(...):把6门科目的得分加总,得到该学生符合要求的科目总数GROUP BY student_id, student_name:按学生唯一标识分组,保证我们统计的是单个学生的整体情况HAVING ... >=4:只保留符合要求的科目数达到4门及以上的学生
如果你有具体的科目列名(比如math、english、physics这类),直接把subject1到subject6替换成实际列名就行,这个写法在MySQL、PostgreSQL、SQL Server等主流数据库中都能正常运行。
内容的提问来源于stack exchange,提问作者Shravan Kumar
相关产品推荐
相关产品推荐

