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

如何查询所有经理员工组合的注册记录数,未注册组合显示为0

SQL查询问题解决

原有查询的问题

  • 你用了UNION ALL直接拼接两个结果集,本质是把登记过的计数记录和全量20种组合记录直接拼在一起,自然会出现重复:已登记的组合会同时出现带计数、带null的两条记录,不符合需求
  • 第二个子查询存在语法错误:你给manager、employee表定义的别名是m、e,但是字段前用了不存在的s、i作为别名,运行时会直接报错
  • 没有做匹配关联,无法将未登记组合的null计数转为0

正确写法

SELECT 
    t.manager,
    t.employee,
    COUNT(r.manager) AS registration_count
FROM 
    -- 先拿到全部20种有效经理员工组合
    (SELECT m.manager, e.employee 
     FROM manager m 
     INNER JOIN employee e ON m.id = e.manager_id) t
-- 左关联登记记录表,匹配到就有值,没匹配到就是null
LEFT JOIN registration r 
    ON t.manager = r.manager 
    AND t.employee = r.employee
GROUP BY 
    t.manager, t.employee

逻辑说明

  1. 内层子查询先关联manager和employee表,拿到你需要的全部20种有效组合作为主表,保证不会漏组合
  2. 用左连接关联registration表,只有经理、员工两个字段都匹配上才会带出登记记录,没登记的组合对应的r表字段全为null
  3. 计数时统计r表的非空字段,COUNT函数会自动忽略null值,未登记的组合统计结果就会返回0,刚好符合你的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:57:04