You need to enable JavaScript to run this app. 双表内连接场景下如何查询覆盖已填、未填调研的全部员工统计数据
优惠活动
大模型
产品
解决方案
定价
更多

双表内连接场景下如何查询覆盖已填、未填调研的全部员工统计数据

调整方案核心

你现在的查询用INNER JOIN关联Events和PrzedhanShort,这种关联只会留下两边关联字段(邮箱)能完全匹配上的记录——说白了就是只有在员工名单里、且在调研事件表有提交记录的人才会被返回,自然会把那些在册但从来没填过调研的员工漏掉。
要实现全量员工覆盖,核心是把内连接换成以员工全量表为基准的左外连接,具体调整要点:

  • 关联逻辑改造:把存全量员工信息的PrzedhanShort设为关联主表,用LEFT JOIN连接Events调研表,保证所有在册员工不会因为没有对应的调研记录被过滤
  • 统计逻辑适配:原来的COUNT(CreatorEmail)不需要额外写NULL判断,没提交调研的员工对应的CreatorEmail字段是NULL,COUNT函数会自动跳过NULL值,最终统计结果为0,刚好匹配未提交的计数要求
  • 字段来源校准:员工维度类的字段(比如nrski、员工邮箱)统一从主表PrzedhanShort取,避免关联不到记录时把员工基础信息弄丢

参考调整后的SQL

SELECT  
    COUNT(e.CreatorEmail) AS 'Liczba wpisów w miesiącu',
    FORMAT(e.[Created],'MM.yyyy') AS 'Wpisy w poszczególnych miesiącach',
    p.nrski,
    p.email AS CreatorEmail
FROM [dbo].PrzedhanShort p -- 全量员工表作为关联主表
LEFT JOIN [dbo].Events e 
    ON p.email = e.CreatorEmail
GROUP BY 
    FORMAT(e.[Created],'MM.yyyy'),
    p.nrski,
    p.email

容易踩的细节坑

  • 别搞反连接顺序:如果把Events表放在左连接的左边,最后返回的结果还是只会覆盖有调研提交记录的员工,根本达不到全量展示的目标
  • 别把事件表的筛选条件写在WHERE子句:如果后续要加统计时间范围的筛选,类似e.Created >= 'xxxx-xx-xx'这类条件必须放到LEFT JOIN的ON关联条件里,要是写到WHERE里,会把那些关联不到记录的NULL值行过滤掉,最后左连接直接退化成和内连接一样的效果
  • 别对当前版本的覆盖度有误解:现在调整后的左连版本,只会返回员工有过提交记录的月份行,没提交过的员工对应的月份字段会显示NULL。如果业务要求按每个统计月份展示所有员工的提交情况(也就是每个月哪怕员工没提交,也要生成对应行显示计数为0),仅靠两表左连实现不了,得额外构造覆盖所有目标统计月份的日期维度表,先和全量员工名单做笛卡尔积生成“员工-月份”的基础骨架,再左连调研事件表做聚合统计

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 06:45:08