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

求助:如何统计员工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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:11:10