Mysql 在SQL中返回列表和计数

Mysql 在SQL中返回列表和计数,mysql,sql,Mysql,Sql,前几天我在电话屏幕上被问到这个问题,我有点不舒服。假设我有下表。这是一个员工表,多个员工可以有同一个主管 +------------+--------------+------+ | Field | Type | Null | +------------+--------------+------+ | name | varchar(40) | NO | | department | varchar(100) | NO | | supervisor

前几天我在电话屏幕上被问到这个问题,我有点不舒服。假设我有下表。这是一个员工表,多个员工可以有同一个主管

+------------+--------------+------+
| Field      | Type         | Null |
+------------+--------------+------+
| name       | varchar(40)  | NO   |
| department | varchar(100) | NO   |
| supervisor | varchar(100) | NO   |
+------------+--------------+------+
我将编写什么查询来返回主管列表以及主管拥有多少员工?

这称为“自联接”,需要使用表别名

select supervisor, count(*) as cnt
from emp
group by supervisor
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

您可以这样使用(假设您的
supervisor
列不是对另一个表的引用)


只需按主管分组进行行计数:

SELECT supervisor, COUNT(*) as managed_employees_n 
FROM Employees  
GROUP BY supervisor
这是可行的,假设您的层次结构只有两个级别:没有主管的主管


在实际场景中,这些名称必须转换为ID,否则按名称分组可能会导致错误的结果。。。如果您发现自己有两个不同的主管,都叫“John Doe”?您使用的是哪种DBMS?博士后?神谕
SELECT supervisor, COUNT(*) as managed_employees_n 
FROM Employees  
GROUP BY supervisor