Mysql 需要来自ids的管理器名称

Mysql 需要来自ids的管理器名称,mysql,sql,Mysql,Sql,我已经能够获取经理ID,但是我需要能够获取这三位经理的姓名,他们目前被困在那里 select d.manager_id, count(employee_id) from hr.departments d inner join hr.employees e on d.department_id = e.department_id group by d.manager_id having count(employee_id) > 5 当我试着去做 select d.manager_id,

我已经能够获取经理ID,但是我需要能够获取这三位经理的姓名,他们目前被困在那里

select d.manager_id, count(employee_id)
from hr.departments d 
inner join hr.employees e on d.department_id = e.department_id
group by d.manager_id
having count(employee_id) > 5
当我试着去做

select d.manager_id, e.first_name, e.last_name, count(employee_id)
from hr.departments d 
inner join hr.employees e on d.department_id = e.department_id
group by d.manager_id, e.first_name, e.last_name
having count(employee_id) >5

我得到空白结果

你也必须加入
员工id
上的
加入

select d.manager_id, e1.first_name, e1.last_name, count(e.employee_id)
from hr.departments d 
inner join hr.employees e on d.department_id = e.department_id  
inner join hr.employees e1 on d.manager_id = e1.employee_id
group by d.manager_id, e.first_name, e.last_name
having count(e.employee_id) > 5
您需要另一个加入到employee才能获得经理的姓名

select name.first_name, name.last_name,
...
inner join hr.employees name on d.manager_id = name.employee_id
如果你想跳过额外的加入,你可以

select d.manager_id,
       max(case when d.manager_id = e.employee_id then e.first_name end) first_name,
       max(case when d.manager_id = e.employee_id then e.last_name end) last_name,
       count(*)
from   department d
join   employee e on d.department_id = e.department_id
group by d.manager_id having count(*) > 5
;

问题在于连接。您是否尝试过使用子查询。差不多

select d.manager_id, e.first_name, e.last_name, count(employee_id)
from hr.departments d 
     inner join hr.employees e on d.department_id = e.department_id
     INNER JOIN (select d.manager_id, 
                 from hr.departments d 
                    inner join hr.employees e on d.department_id = e.department_id
      group by d.manager_id
       having count(employee_id) > 5) as m on d.manager_id = m.manager_id
group by d.manager_id, e.first_name, e.last_name

这将忽略除部门经理之外的所有部门员工。该问题询问的是
经理
姓名,而不是
员工姓名
,但他们仍需要计数。此查询将不计算非经理员工。
select d.manager_id, e.first_name, e.last_name, count(employee_id)
from hr.departments d 
     inner join hr.employees e on d.department_id = e.department_id
     INNER JOIN (select d.manager_id, 
                 from hr.departments d 
                    inner join hr.employees e on d.department_id = e.department_id
      group by d.manager_id
       having count(employee_id) > 5) as m on d.manager_id = m.manager_id
group by d.manager_id, e.first_name, e.last_name