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

SQL分组查询:统计列中所有不同值的数量(含数量为0的情况)

解决方法

要显示计数为0的ID Type,核心是以所有存在的ID Type作为基准数据集,再左关联符合条件的客户数据,具体SQL如下:

-- 先获取所有唯一的ID Type,作为基准
WITH AllIdTypes AS (
    SELECT DISTINCT [ID Type] FROM 表2
)
SELECT 
    ait.[ID Type],
    -- 统计匹配到的活跃A类客户数,无匹配则为0
    COUNT(t1.ID) AS [Count of Active Cust Type A]
FROM AllIdTypes ait
-- 左连接:保留所有ID Type,即使没有对应客户
LEFT JOIN 表2 t2 ON ait.[ID Type] = t2.[ID Type]
LEFT JOIN 表1 t1 ON t2.ID = t1.ID 
    AND t1.[Cust Type] = 'A' 
    AND t1.Status = 'Active'
GROUP BY ait.[ID Type]
ORDER BY ait.[ID Type];

关键逻辑说明

  • 基准数据集(AllIdTypes):用DISTINCT从表2提取所有ID Type,确保哪怕没有对应活跃A类客户的Type(比如Type5)也会被包含进来。
  • 左连接顺序:先关联基准表和表2,再左连接筛选后的表1(注意把筛选条件写在ON里而不是WHERE,否则会把无匹配的行过滤掉)。
  • 计数方式:用COUNT(t1.ID)而不是COUNT(*),因为左连接无匹配时t1.ID为NULL,COUNT会自动忽略NULL值,得到0;如果用COUNT(*)会把左连接生成的空行算成1,结果错误。

如果你的SQL版本不支持CTE(比如旧版MySQL),可以改用子查询:

SELECT 
    ait.[ID Type],
    COUNT(t1.ID) AS [Count of Active Cust Type A]
FROM (SELECT DISTINCT [ID Type] FROM 表2) ait
LEFT JOIN 表2 t2 ON ait.[ID Type] = t2.[ID Type]
LEFT JOIN 表1 t1 ON t2.ID = t1.ID 
    AND t1.[Cust Type] = 'A' 
    AND t1.Status = 'Active'
GROUP BY ait.[ID Type]
ORDER BY ait.[ID Type];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:06:05