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

Oracle中使用左外连接统计员工各任务分配次数的问题

实现员工任务分配次数统计的SQL方案

没问题,我来帮你搞定这个统计需求!要得到每位员工在三个任务角色(generator、analyzer、tester)中的分配次数,我们可以通过左外连接+分组统计的方式实现,确保所有员工都能被展示,哪怕某个任务没有分配记录也会显示0次。

核心思路

  1. 分别统计每个任务角色中各员工的出现次数;
  2. 将这三个统计结果与employee表做左外连接,保证所有员工都被包含;
  3. 用COALESCE函数把空值(无分配记录的情况)转换为0,最终得到目标格式。

完整SQL代码

SELECT
    e.empid,
    e.empname,
    COALESCE(g.generator_count, 0) AS generator,
    COALESCE(a.analyzer_count, 0) AS analyzer,
    COALESCE(t.tester_count, 0) AS tester
FROM employee e
LEFT JOIN (
    -- 统计generator角色的分配次数
    SELECT generator, COUNT(*) AS generator_count
    FROM allocation
    GROUP BY generator
) g ON e.empid = g.generator
LEFT JOIN (
    -- 统计analyzer角色的分配次数
    SELECT analyzer, COUNT(*) AS analyzer_count
    FROM allocation
    GROUP BY analyzer
) a ON e.empid = a.analyzer
LEFT JOIN (
    -- 统计tester角色的分配次数
    SELECT tester, COUNT(*) AS tester_count
    FROM allocation
    GROUP BY tester
) t ON e.empid = t.tester
ORDER BY e.empid;

结果验证

执行这段SQL后,会完美匹配你需要的结果:

empidempnamegeneratoranalyzertester
101Tom111
102Jerry120
103Jack101
104Tim001

这个方案适用于绝大多数主流SQL数据库(MySQL、PostgreSQL、SQL Server等),COALESCE是标准SQL函数,能很好地兼容不同数据库环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:20:08