前几天我在电话屏幕上被问到这个问题我遇到了麻烦。假设我有下表。这是一个员工表,不止一个员工可以拥有相同的主管。
+------------+--------------+------+
| Field | Type | Null |
+------------+--------------+------+
| name | varchar(40) | NO |
| department | varchar(100) | NO |
| supervisor | varchar(100) | NO |
+------------+--------------+------+
我会写什么查询来返回主管名单以及该主管有多少员工?
答案 0 :(得分:1)
你会使用这样的东西(假设你的supervisor
列不是对另一个表的引用)
select supervisor, count(name)
from employees
group by supervisor ;
答案 1 :(得分:0)
select supervisor, count(*) as cnt
from emp
group by supervisor
答案 2 :(得分:0)
这称为“自联接”,需要使用表别名。
SELECT a.*, COUNT(b.name) AS numsubs
FROM employees AS a
LEFT JOIN employees AS b
ON a.name = b.supervisor
GROUP BY b.supervisor
答案 3 :(得分:0)
只需按主管分组行计数:
SELECT supervisor, COUNT(*) as managed_employees_n
FROM Employees
GROUP BY supervisor
这是有效的,假设您的层次结构只有2个级别:没有主管的主管。
在实际场景中,这些名称必须转换为ID,否则按名称分组可能会导致错误的结果......如果您发现自己有两个不同的主管,这两个主管都叫做“John Doe”?