求助:如何统计员工ID在executive列中的出现次数
解决员工ID作为executive的关联次数统计问题
我来帮你搞定这个统计需求!首先咱们先理清当前SQL的问题,再给出精准的解决方案。
你的当前情况
- 期望目标:统计每个员工ID在
executive列中被其他员工关联的次数(也就是有多少员工把该员工设为自己的executive) - 当前使用的SQL:
SELECT id_employee, lastname, COUNT(id_employee) FROM employees WHERE id_employee IN (SELECT executive FROM employees) GROUP BY lastname, id_employee;
- 图1:数据表及期望结果(展示了员工基础数据,以及期望得到的每个员工作为executive的关联次数)
- 图2:当前SQL执行结果(得到的结果不符合预期,因为它统计的是员工自身的记录数,而非被关联的次数)
问题分析
你当前的SQL逻辑有偏差:COUNT(id_employee)统计的是该员工在employees表中的自身记录行数,加上WHERE id_employee IN (SELECT executive FROM employees)只是筛选出那些曾被设为executive的员工,但并没有统计他们被其他员工关联的次数。
正确的解决方案
这里提供两种实用写法,你可以按需选择:
方法1:使用JOIN关联统计
SELECT e.id_employee, e.lastname, COUNT(ex.executive) AS executive_association_count FROM employees e LEFT JOIN employees ex ON e.id_employee = ex.executive GROUP BY e.id_employee, e.lastname ORDER BY executive_association_count DESC;
- 逻辑说明:通过左连接将员工表与自身关联,关联条件是员工ID等于另一行的
executive值,统计每个员工对应的关联行数,就是他被作为executive的次数。 - 灵活调整:如果想包含从未被设为executive的员工(次数显示为0),用
LEFT JOIN即可;如果只需要统计有被关联的员工,把LEFT JOIN改成INNER JOIN就行。
方法2:使用子查询统计
SELECT id_employee, lastname, (SELECT COUNT(*) FROM employees WHERE executive = e.id_employee) AS executive_association_count FROM employees e ORDER BY executive_association_count DESC;
- 逻辑说明:对每个员工,用子查询统计
executive列中等于该员工ID的行数,直接得到关联次数。 - 优势:写法更直观,适合快速理解基础关联逻辑的场景。
验证结果
执行上面任意一种SQL,你就能得到和图1中期望一致的结果啦!
内容的提问来源于stack exchange,提问作者sqlvxd
相关产品推荐
相关产品推荐

