技术求助:如何基于给定员工ID列表统计各部门文档提交数量
如何根据员工ID列表统计各部门文档提交数量
我来帮你搞定这个统计需求!你的同事手里有一份提交文档的员工ID清单,但没有对应部门的数据;而你有权限访问包含员工ID和部门映射的workforce表,核心就是要把这两组数据关联起来,才能算出每个部门的提交量。
你之前的查询只单独查了workforce表,没关联同事的提交ID列表,所以肯定得不到正确的提交统计结果。下面给你两种实用的解决方法:
方法1:直接把同事的ID列表写进查询(适合短列表)
如果同事给的ID不多,你可以用UNION ALL把这些ID拼成一个临时的提交记录表,再和你的workforce表关联统计:
SELECT wf.department, COUNT(submit.empid) AS 提交数量 FROM ( -- 把同事给的员工ID逐个填在这里,每个ID对应一行SELECT SELECT 'EMP001' AS empid UNION ALL SELECT 'EMP002' AS empid UNION ALL SELECT 'EMP005' AS empid -- 更多ID继续加UNION ALL即可 ) AS submit -- 左连接确保即使有些ID在workforce里找不到(比如离职员工)也能被统计 LEFT JOIN workforce wf ON submit.empid = wf.empid -- 按部门分组统计 GROUP BY wf.department -- 可选:按提交数量从多到少排序 ORDER BY 提交数量 DESC;
小提示:如果同事的ID列表里有重复(同一个员工多次提交),记得把
COUNT(submit.empid)改成COUNT(DISTINCT submit.empid),避免重复统计同一个员工。
方法2:先导入ID列表为临时表(适合长列表)
如果同事的ID列表很长,手动写UNION ALL太麻烦,可以让他把ID存成纯文本/CSV文件,你先导入成数据库临时表(比如叫submit_records),然后用下面的查询:
SELECT wf.department, COUNT(sr.empid) AS 提交数量 FROM submit_records sr LEFT JOIN workforce wf ON sr.empid = wf.empid GROUP BY wf.department ORDER BY 提交数量 DESC;
额外注意事项
- 确保两边的
empid格式完全一致(比如都是字符串、没有大小写差异、没有多余空格),否则会出现关联失败的情况 - 如果不需要统计那些找不到部门的提交记录,把
LEFT JOIN改成INNER JOIN即可 - 如果想同时看到各部门提交占总提交数的比例,可以加个窗口函数:
SELECT wf.department, COUNT(sr.empid) AS 提交数量, COUNT(sr.empid) OVER() AS 总提交数, ROUND(COUNT(sr.empid)*100.0/COUNT(sr.empid) OVER(), 2) AS 提交占比 FROM submit_records sr LEFT JOIN workforce wf ON sr.empid = wf.empid GROUP BY wf.department ORDER BY 提交数量 DESC;
内容的提问来源于stack exchange,提问作者user9712119
相关产品推荐
相关产品推荐

