什么是 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 查询来查找监督的员工比任何其他主管都多的员工的姓名?的主要内容,如果未能解决你的问题,请参考以下文章

Sql 查询查找更高的薪水

李新海:不会培训,你升职加薪基本无望

MySQL 练习<3>

MySQL 练习<3>

点读系列《管理学 斯蒂芬 P. 罗宾斯》

sql——视图