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

满足全局B/C/D为0且含A=1的Distinct ID统计问题求解

问题分析

你原来的SQL只筛选了单条记录满足A=1且B/C/D=0的ID,但没有验证该ID的所有记录是否都符合B/C/D=0的要求,所以ID2被错误统计了——虽然它有两条符合A=1且B/C/D=0的记录,但存在一条B=1的记录,完全不符合条件。

正确解决方案

方法1:GROUP BY + HAVING(逻辑清晰,推荐)

通过分组后聚合判断,确保ID同时满足两个核心条件:

  1. 至少有一条记录A=1(用MAX(A)=1验证,只要有一条A=1,最大值就是1)
  2. 所有记录的B/C/D都是0(用MAX(B/C/D)=0验证,只要有一条记录不为0,最大值就会大于0)
SELECT COUNT(ID)
FROM tab
GROUP BY ID
HAVING MAX(A) = 1 
   AND MAX(B) = 0 
   AND MAX(C) = 0 
   AND MAX(D) = 0;

这里不用COUNT(DISTINCT ID)是因为GROUP BY ID已经按ID分组,每个ID只返回一行,直接COUNT即可。

方法2:NOT EXISTS 子查询

先找出所有有A=1的ID,再排除那些存在B/C/D不为0记录的ID:

SELECT COUNT(DISTINCT t1.ID)
FROM tab t1
WHERE t1.A = 1
  AND NOT EXISTS (
    SELECT 1
    FROM tab t2
    WHERE t2.ID = t1.ID
      AND (t2.B <> 0 OR t2.C <> 0 OR t2.D <> 0)
  );

子查询会检查当前ID是否存在任何不符合B/C/D=0的记录,存在则直接排除该ID。

验证结果

两种方法都会返回0,符合预期——ID1有D=1的记录,ID2有B=1的记录,都不满足条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:22:52