Mysql 选择、分组和计数查询
我在下面有一个样本表Mysql 选择、分组和计数查询,mysql,sql,Mysql,Sql,我在下面有一个样本表 +-------------+-------------+-------------+----------+------------+---------------------------------+----------+---------------+ | employee_id | first_name | last_name | email | joined_date| title | salary
+-------------+-------------+-------------+----------+------------+---------------------------------+----------+---------------+
| 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 |
某些员工是此表中其他员工的主管。请注意,主管id是员工id
我的任务是仅使用SELECT语句获取员工id、姓名、主管的工资以及主管下的员工总数
在我看来,我知道我需要使用某种分组和计数。首先,统计每个主管下的员工数量,其次是按主管ID分组。我通过使用此查询,使用简单的计数和分组来获得输出:
SELECT employee_id, COUNT(supervisor_id)
FROM EMPLOYEE
GROUP BY supervisor_id;
这将输出主管id和主管id下的员工数量,即:
+---------------+----------------------+
| supervisor_id | COUNT(supervisor_id) |
+---------------+----------------------+
| NULL | 0 |
| 100 | 2 |
| 101 | 0 |
| 102 | 0 |
| 103 | 3 |
*上表稍作修改-这是一个示例输出
如上所述,supervisor_id是同一表格中员工的员工id。我的问题是,我无法使此表显示员工id、姓名和薪水以及计数列。最终结果必须显示链接到主管id的员工id、姓名、工资、计数
我试过这个
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 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 list的错误表达式1不在GROUP BY子句中,并且包含未聚合列,根据联机信息,这是我如何创建查询的,不能混合聚合列和非聚合列
谁能给我指点一下吗?谢谢。我想你只需要在这里自左加入即可: 顺便说一句,您在注释中提到要使用计数=0。您最好不要将HAVING用于此目的,而只是将此查询更改为内部联接。它将以同样但更有效的方式进行。 请试试这个
SELECT E1.supervisor_id,count(E2.supervisor_id) FROM `EMPLOYEE` AS E1
LEFT JOIN (select supervisor_id FROM EMPLOYEE GROUP BY
supervisor_id) AS E2 ON E1.supervisor_id = E2.supervisor_id
GROUP BY E1.supervisor_id
提示:在FROM下的子查询中使用GROUP BY,然后在EXTER-query中执行联接。这需要递归CTE或递归存储过程(如果在数据库中执行)。您使用的是什么版本的MySQL?如果您设置了某种db/sql小提琴,这也会很有帮助。谢谢。基本上我需要在一个查询中连接两个表@GordonLinoff,我只是在CMD提示符下运行这个。这实际上是教育性的。主管下的员工总数仅指主管下的第一级或以下级别?我假设是以下级别-基本上包括任何监督其他人的员工。嗨,这都在同一个表中。必须加入?@SunnyBoiz您是否尝试运行查询?yes JOIN对执行自连接查询是有效的。我已尝试您的查询,并将HAVING子句添加到筛选器0。但我认为这在逻辑上有点错误-计数应该是计算主管id而不是员工id。我想计数部分的更改应该是正确的?我正在尝试戴的建议,在从太小组。@SunnyBoiz这将是不正确的。尝试将s别名视为supervisors表,e别名视为employee表。因此,我们选择所有主管,然后统计向该主管报告的所有员工。