如何在MYSQL中使用Group语句进行选择,多个属性

时间:2019-11-03 15:43:38

标签: mysql

我正在尝试选择主管的员工ID,姓名,雇用日期等,以及每位主管直接监督的员工总数。并且仅显示那些监督了8位或更多员工的记录。

这就是我用来获取以下结果的方法

select supervisor_id, COUNT(supervisor_id)
FROM EMPLOYEE
GROUP BY supervisor_id
HAVING COUNT(supervisor_id) >= 8; 

``` Result
+---------------+----------------------+
| supervisor_id | COUNT(supervisor_id) |
+---------------+----------------------+
|           100 |                   14 |
|           120 |                    8 |
|           121 |                    8 |
|           122 |                    8 |
|           123 |                    8 |
|           124 |                    8 |
+---------------+----------------------+

what I wanted to write was: 

SELECT employee_id, first_name, last_name, hire_date, salary COUNT(supervisor_id)
FROM EMPLOYEE
GROUP BY supervisor_id, 
HAVING COUNT(supervisor_id) >= 8; 

2 个答案:

答案 0 :(得分:0)

要列出拥有8名以上主管的主管的员工,

SELECT employee_id, first_name, last_name, hire_date, salary, supervisor_id
FROM EMPLOYEE
WHERE supervisor_id IN (
   select supervisor_id
   FROM EMPLOYEE
   GROUP BY supervisor_id
   HAVING COUNT(supervisor_id) >= 8);

要列出拥有8名以上员工的主管,请执行以下操作:

SELECT employee_id, first_name, last_name, hire_date, salary, supervisor_id
FROM EMPLOYEE
WHERE employee_id IN (
   select supervisor_id
   FROM EMPLOYEE
   GROUP BY supervisor_id
   HAVING COUNT(supervisor_id) >= 8);
HAVING COUNT(supervisor_id) >= 8; 

答案 1 :(得分:0)

将表联接到一个查询中,该查询返回主管ID和每个主管的受监管雇员人数:

SELECT e.employee_id, e.first_name, e.last_name, e.hire_date, e.salary, s.counter
FROM employee e INNER JOIN (
   SELECT supervisor_id, COUNT(*) counter
   FROM employee
   GROUP BY supervisor_id
   HAVING COUNT(*) >= 8
) s on s.supervisor_id = e.employee_id