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

如何编写SQL查询获取符合特定科目成绩与总分要求的唯一ID

解决方法:筛选同时满足多科目成绩及总分条件的ID

需求说明

需要查询满足以下所有条件的唯一ID:

  • 数学科目成绩为80分
  • 英语科目成绩为70分
  • 所有科目总分≥400分

预期结果:ID 1 和 ID 2

数据集

ID      Subject Marks
1   Maths   80
1   English 70
1   Hindi   80
1   Science 80
1   SST 90
2   Maths   80
2   English 70
2   Hindi   90
2   Science 80
2   SST 100
3   Maths   80
3   English 60
3   Hindi   90
3   Science 100
3   SST 100

原SQL的问题

你之前的SQL使用OR逻辑,会把满足数学80或英语70的ID都筛选出来,且因为是从单条记录匹配,会导致同一个ID重复出现;更关键的是,它无法确保ID同时满足两个科目条件,比如ID3数学是80但英语不是70,也会被错误筛选出来。

正确解法

方法一:GROUP BY + HAVING(推荐)

通过分组后用条件统计来确保两个科目都满足,同时校验总分:

SELECT ID
FROM ff
GROUP BY ID
HAVING 
  -- 确保存在数学80的记录
  SUM(CASE WHEN Subject = 'Maths' AND Marks = 80 THEN 1 ELSE 0 END) > 0
  -- 确保存在英语70的记录
  AND SUM(CASE WHEN Subject = 'English' AND Marks = 70 THEN 1 ELSE 0 END) > 0
  -- 校验总分≥400
  AND SUM(Marks) >= 400;

方法二:JOIN + EXISTS

通过关联数学和英语的记录来确保同时满足,再校验总分:

SELECT DISTINCT m.ID
FROM ff m
JOIN ff e ON m.ID = e.ID
WHERE 
  m.Subject = 'Maths' AND m.Marks = 80
  AND e.Subject = 'English' AND e.Marks = 70
  AND EXISTS (
    SELECT 1 
    FROM ff t 
    WHERE t.ID = m.ID 
    GROUP BY ID 
    HAVING SUM(Marks) >= 400
  );

两种方法都能得到预期的ID 1和ID 2结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:52:42