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

SQL查询如何筛选2020和2021年每年均至少通过一次的课程

问题分析

你现有SQL的问题出在分组规则上:按course和year双字段分组后,返回的是所有单年满足通过要求的课程记录,无法验证该课程是否同时覆盖2020、2021两个年份的通过条件。

正确实现方案

方案1:按课程单分组,分别校验年份条件

SELECT course
FROM grade
WHERE year IN (2020, 2021)
GROUP BY course
HAVING SUM(CASE WHEN year = 2020 AND pass = 'Yes' THEN 1 ELSE 0 END) > 0
   AND SUM(CASE WHEN year = 2021 AND pass = 'Yes' THEN 1 ELSE 0 END) > 0;

如果你的pass字段是标准布尔类型,把pass = 'Yes'替换为pass = TRUE即可。

方案2:通用扩展写法

如果后续需要适配更多年份的校验,推荐这种写法:

SELECT course
FROM grade
WHERE year IN (2020, 2021)
  AND pass = 'Yes' -- 先过滤未通过记录,降低后续计算开销
GROUP BY course
HAVING COUNT(DISTINCT year) = 2;

需要调整校验年份数量时,只需修改WHERE条件里的年份范围,以及HAVING里的计数值等于需要校验的年份总数即可。

样例匹配说明

针对你给出的样例数据,上述SQL执行结果为空,因为样例中不存在同时在2020、2021年都有通过记录的课程。

内容的提问来源于stack exchange,提问作者kinder chen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:15:08