返回SQL中的列表和计数

时间:2014-03-01 05:22:56

标签: mysql sql

前几天我在电话屏幕上被问到这个问题我遇到了麻烦。假设我有下表。这是一个员工表,不止一个员工可以拥有相同的主管。

+------------+--------------+------+
| Field      | Type         | Null |
+------------+--------------+------+
| name       | varchar(40)  | NO   |
| department | varchar(100) | NO   |
| supervisor | varchar(100) | NO   |
+------------+--------------+------+

我会写什么查询来返回主管名单以及该主管有多少员工?

4 个答案:

答案 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”?