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

如何编写SQL语句实现符合预期的分组计数查询?

修正后的SQL语句

要实现「同一ID下的同一StuId,若存在IsDone=true的记录,则忽略该StuId的所有记录」的统计需求,可使用以下两种方案:

方案1:用NOT EXISTS排除不符合条件的StuId

SELECT 
    ID, 
    COUNT(DISTINCT StuId) AS Count
FROM Student s_main
WHERE NOT EXISTS (
    SELECT 1
    FROM Student s_sub
    WHERE s_sub.ID = s_main.ID
      AND s_sub.StuId = s_main.StuId
      AND s_sub.IsDone = true
)
GROUP BY ID;

方案2:先分组筛选再统计

SELECT 
    ID, 
    COUNT(StuId) AS Count
FROM (
    SELECT 
        ID, 
        StuId
    FROM Student
    GROUP BY ID, StuId
    -- 筛选出该ID+StuId下无IsDone=true记录的分组
    HAVING SUM(CASE WHEN IsDone = true THEN 1 ELSE 0 END) = 0
) valid_stus
GROUP BY ID;

原SQL的问题分析

你的原SQL仅筛选了IsDone=false的记录并去重,但未排除「同一ID+StuId下存在IsDone=true」的StuId。比如ID=11111的q-01、q-02,虽然有IsDone=false的记录,但按照规则应被完全排除,可原SQL仍将它们纳入统计,导致结果不符合预期。另外你提到实际结果为11111=1,这大概率是执行的SQL与你提供的代码不一致(比如误将IsDone=false写成IsDone=true),按你给出的原SQL,理论上会得到11111=4的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:02:05