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

含COUNT DISTINCT的嵌套SELECT按第三列分组统计的实现问题

解决按ColumnC分组的条件统计问题

我完全懂你的需求——要按ColumnC分组,分别算出每组里满足两个不同条件的唯一id数量。你原来的SQL跑不起来,核心问题是里面的子查询没和分组的ColumnC关联,所以它只会返回全局的统计值,而不是每个分组各自的结果。

正确的做法是用条件聚合,把判断逻辑嵌入聚合函数里,这样就能针对每个分组计算对应统计值了。这里用COUNT(DISTINCT CASE ...)来实现:

SELECT 
    ColumnC,
    -- 统计每组中Status不等于'closed'的唯一id数量
    COUNT(DISTINCT CASE WHEN Status NOT LIKE 'closed' THEN id END) AS ColumnA,
    -- 统计每组中Status不等于'closed'且Datevalue不晚于当前日期的唯一id数量
    COUNT(DISTINCT CASE WHEN Status NOT LIKE 'closed' AND Datevalue <= GETDATE() THEN id END) AS ColumnB
FROM Database
GROUP BY ColumnC;

逻辑拆解:

  • CASE语句会逐行检查条件,符合条件时返回对应的id,不符合则返回NULL
  • COUNT()函数会自动忽略NULL值,搭配DISTINCT就能得到每组中满足条件的唯一id总数
  • GROUP BY ColumnC保证所有统计都是基于每个ColumnC分组单独计算的

如果某个ColumnC分组里没有符合条件的数据,对应的ColumnA或ColumnB会返回0,这应该正好匹配你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:02:02