什么是 SQL 查询来查找监督的员工比任何其他主管都多的员工的姓名?
Posted
技术标签:
【中文标题】什么是 SQL 查询来查找监督的员工比任何其他主管都多的员工的姓名?【英文标题】:What is the SQL query to find the name of employee who supervises more employees than any other supervisor? 【发布时间】:2017-04-18 00:40:19 【问题描述】:用什么 SQL 查询可以找到监督的员工比任何其他主管都多的员工的姓名?
Employee
+----------+-----------+-----------+
| Fname | Ssn | Super_ssn |
+----------+-----------+-----------+
| John | 123456789 | 333445555 |
| Franklin | 333445555 | 888665555 |
| Alicia | 999887777 | 987654321 |
| Jennifer | 987654321 | 888665555 |
| Ramesh | 666884444 | 333445555 |
| Joyce | 453453453 | 333445555 |
| Ahmad | 987987987 | 987654321 |
| James | 888665555 | NULL |
+----------+-----------+-----------+
这是我尝试过的
SELECT Fname
FROM Employee
WHERE Super_ssn >=ALL(Select Super_ssn
FROM Employee)
Fname = 员工姓名
SSN = 员工 SSN
Supervisor_ssn = 员工主管的 SSN
SSN 表还包含主管的 SSN。他们都在同一张桌子上
DB 是 mysql
都是同一张名为“Employee”的表
【问题讨论】:
如果您可以发布您的表格,我们将不胜感激,否则会给您一个伪代码 @maSTARHiAn 完成。 【参考方案1】:这里最简单的就是按员工人数列出:
SELECT Supervisor_ssn, COUNT(SSN) as n
FROM Employee
GROUP BY Supervisor_ssn
ORDER BY n DESC
你想要的会排在首位。
希望对你有帮助
【讨论】:
这很好用,是最实用的解决方案。但是我们如何才能只检索顶部员工的姓名呢? 您可以在底部添加LIMIT 1。【参考方案2】:试试这个。如果您想要一个按监督最多到最少的人排序的列表,请删除 LIMIT 1 子句
SELECT
e1.`Fname`,
COUNT(e2.`Fname`) AS `Num_Empl`
FROM `Employee` e1
JOIN `Employee` e2
ON e2.`Ssn` = e1.`Super_ssn`
GROUP BY e1.`Fname`
ORDER BY `Num_Empl` DESC
LIMIT 1;
【讨论】:
以上是关于什么是 SQL 查询来查找监督的员工比任何其他主管都多的员工的姓名?的主要内容,如果未能解决你的问题,请参考以下文章