sql - 计算其他列中 ID 的出现次数
问题描述
我正在尝试运行一个查询,该查询加载员工 ID、他们的经理(从 CEO 到直接主管),然后计算他们的报告组中的人数(他们直接或间接监督的人)。我已经弄清楚如何做第一部分,加载员工 ID 和经理层次结构。
为了简化我的问题,假设我创建的表如下所示:
EMPL_ID MGR_1 MGR_2
001 001
002 001
003 001 002
004 001 002
005 001 002
006 001
007 001 006
所以 MGR_1 是最高管理者(我的实际数据集有数千行和管理者一直到 MGR_10,但这个简单的例子应该是说明性的)。我想要的最终结果是:
EMPL_ID MGR_1 MGR_2 REP_GRP
001 001 7
002 001 3
003 001 002 0
004 001 002 0
005 001 002 0
006 001 1
007 001 006 0
所以 REP_GRP 是向 EMPL_ID 指定的人员报告的员工数量。
我试过用子查询和案例语句来做这件事,但我不能让它工作。有任何想法吗?
解决方案
你可以试试下面的代码。可能有更好的解决方案,但这是我在旅途中能想到的。
WITH MgrCount AS (
select MGR_1 AS Mgr, COUNT(EMPL_ID) AS REP_GRP
FROM CountMGR
WHERE MGR_1 IS NOT NULL
GROUP BY MGR_1
UNION ALL
select MGR_2 AS Mgr, COUNT(EMPL_ID) AS REP_GRP
FROM CountMGR
WHERE MGR_2 IS NOT NULL
GROUP BY MGR_2
)
SELECT EMPL_ID, MGR_1, MGR_2, COALESCE (REP_GRP, 0)
FROM CountMGR AS M
LEFT OUTER JOIN MgrCount AS C ON M.EMPL_ID = C.Mgr
推荐阅读
- pandas - 如何根据队友预测获胜者
- snakemake - Snakemake 集群模式,每个规则的 CPU 计数不同
- viewmodel - Jetpack Compose 在 ViewModel 中观察 mutableStateOf
- emacs - (Emacs) 括号没有正确缩进
- wordpress - woocommerce_shared_settings 弃用的控制台错误
- python - 从 JSON 文件读取的解包列表到函数调用
- java - 如何从 Java 成功与 python Twisted 服务器通信?
- javascript - 在 Google 表格中,如何扫描整个列以查找错误单元格并将内容替换为上面单元格中的内容?
- node.js - Alexa - How to send image to user?
- python - Is there a better way to check months and days to print the seasons in python? I cant use def and class or loops