You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选至少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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:51:00