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

SQL连接缺失值统计:如何查询包含无数据分类的计数?

解决SQL查询返回全部分组-用户组合并统计数量的问题

你当前的查询是从Table2出发做左连接,所以只能拿到Table2中实际存在关联关系的分组和用户组合。要实现所有分组与所有用户的全量组合,无关联时数量显示0的需求,需要先构建出所有可能的分组-用户配对,再关联统计数据。

实现思路

  1. 先提取Table2中所有不重复的分组名称,得到完整的分组列表
  2. 将分组列表与Table1做交叉连接(CROSS JOIN),生成每个分组对应每个用户的全量组合
  3. 左连接回Table2,匹配对应的GUID记录,最后统计每个组合的唯一GUID数量(无匹配时自动返回0)

最终查询语句

SELECT 
    G.GroupName, 
    A.NAME, 
    COUNT(DISTINCT B.GUID) AS Quantity
FROM 
    (SELECT DISTINCT GroupName FROM Table2) G
CROSS JOIN 
    Table1 A
LEFT JOIN 
    Table2 B ON G.GroupName = B.GroupName AND A.ID = B.ID
GROUP BY 
    G.GroupName, 
    A.NAME
ORDER BY 
    G.GroupName, 
    A.NAME;

语句说明

  • (SELECT DISTINCT GroupName FROM Table2) G:单独提取不重复的分组,避免后续交叉连接时出现重复分组
  • CROSS JOIN Table1 A:生成分组与用户的笛卡尔积,确保每个分组都能对应到所有用户
  • LEFT JOIN Table2 B ...:保留所有分组-用户组合,仅关联存在的GUID记录
  • COUNT(DISTINCT B.GUID):统计唯一GUID的数量,当没有匹配记录时,B.GUID为NULL,COUNT会返回0,正好符合你的需求
  • ORDER BY:让结果按分组和用户名称排序,和你期望的输出格式一致

执行这个查询后,就能得到你想要的结果:

GroupName | NAME | Quantity
----------+------+---------
GroupA    | AAA  | 2
GroupA    | BBB  | 3
GroupA    | CCC  | 0
GroupA    | DDD  | 0
GroupB    | AAA  | 0
GroupB    | BBB  | 3
GroupB    | CCC  | 2
GroupB    | DDD  | 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:08:11