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

SQL数据过滤:仅当所有pass_flag为Y时统计学生成绩总和

SQL需求实现

需求规则

  • 测试数据表包含学生关联的考试记录,pass_flag字段标识单条记录是否通过,取值为Y/N
  • 过滤逻辑:仅当某学生的所有关联记录pass_flag均为Y时,才返回该学生的mark字段总和

实现逻辑

核心是按学生维度分组后,校验分组内是否存在pass_flag为N的记录,排除存在N的分组后,对剩余分组计算mark总和即可。

可直接运行的SQL写法

通用兼容写法(适配所有SQL数据库)

SELECT
  student_id,
  SUM(mark) AS sum_mark
FROM 你的测试表名
GROUP BY student_id
-- 筛选分组内pass_flag为N的记录数为0的学生,即全为Y
HAVING SUM(CASE WHEN pass_flag = 'N' THEN 1 ELSE 0 END) = 0;

简洁写法(适配MySQL、PostgreSQL等支持布尔聚合的数据库)

SELECT
  student_id,
  SUM(mark) AS sum_mark
FROM 你的测试表名
GROUP BY student_id
-- 分组内所有行pass_flag='Y'的判断全为真时,按位与结果才为1
HAVING BIT_AND(pass_flag = 'Y') = 1;

逻辑验证说明

针对3条测试数据的场景:

  • 若某学生关联2条Y、1条N:分组内N的计数为1,会被HAVING条件过滤,不会返回
  • 若某学生关联的记录全为Y:分组内N的计数为0,会正常返回mark总和,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:45:47