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