【发布时间】:2020-08-15 22:18:28
【问题描述】:
我在下面有一个示例表,
+-------------+-------------+-------------+----------+------------+---------------------------------+----------+---------------+
| employee_id | first_name | last_name | email | joined_date| title | salary | supervisor_id |
+-------------+-------------+-------------+----------+------------+---------------------------------+----------+---------------+
| 100 | John | King | EM1 | 1984-06-17 | CEO | 14000.00 | NULL |
| 101 | Leona | Kochhar | EM2 | 1993-09-21 | COO | 10000.00 | 100 |
| 102 | Lex | De Haan | EM3 | 1992-01-13 | CFO | 9000.00 | 100 |
| 103 | Alexander | Hunold | EM4 | 2001-04-03 | Gamer | 5000.00 | 102 |
| 104 | Dave | William | EM5 | 2002-05-21 | Gamer | 2000.00 | 103 |
| 105 | David | Austin | EM6 | 2002-06-25 | Gamer | 2800.00 | 103 |
| 106 | Valli | Longwind | EM7 | 2002-02-43 | Gamer | 2800.00 | 103 |
某些员工是此表中其他员工的主管。请注意,supervisor_id 是employee_id。
我的任务是只使用 SELECT 语句来获取主管的employee_id、first_name、薪水和主管下的员工总数。
在我看来,我知道我需要使用某种分组和计数。首先, COUNT 每位主管下的员工人数,其次是 GROUP BY 主管 ID。我设法使用这个查询使用简单的 COUNT 和 GROUP BY 获得输出:
SELECT employee_id, COUNT(supervisor_id)
FROM EMPLOYEE
GROUP BY supervisor_id;
这会输出 supervisor_id 和 supervisor_id 下的员工数量。即:
+---------------+----------------------+
| supervisor_id | COUNT(supervisor_id) |
+---------------+----------------------+
| NULL | 0 |
| 100 | 2 |
| 101 | 0 |
| 102 | 0 |
| 103 | 3 |
*上面的表格略有修改 - 这是一个示例输出
如前所述,supervisor_id 是同一张表中员工的employee_id。我的问题是我无法让这张表显示employee_id、first_name 和salary 以及COUNT 列。最终结果必须显示employee_id(链接到supervisor_id)、first_name、salary、COUNT。
我试过了
SELECT employee_id, first_name, salary, COUNT(supervisor_id)
FROM EMPLOYEE
GROUP BY employee_id, first_name, salary, supervisor_id;
但这只是返回原始表。
当我尝试这个时
SELECT employee_id, first_name, salary, COUNT(supervisor_id)
FROM EMPLOYEE
GROUP BY supervisor_id;
它返回错误“SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列”,根据网上的说法,这是我制作查询的方式(不能混合聚合列和非聚合列?)。
有人可以指导我吗?谢谢。
【问题讨论】:
-
提示:在
FROM下的子查询中使用GROUP BY,然后在外部查询中使用JOIN。 -
这需要递归 CTE 或递归存储过程(如果在数据库中完成)。您使用的是什么版本的 MySQL?如果您设置某种 db/sql fiddle 也会很有帮助。
-
谢谢戴。基本上我需要在一个查询中加入两个表? @GordonLinoff,我只是从 CMD 提示符下运行它。这实际上是有教育意义的。
-
上司下的员工总数是指上司下一级还是下级?
-
我猜是下面的级别 - 基本上任何监督另一个人的员工都会被包括在内。