Mysql 需要来自ids的管理器名称
我已经能够获取经理ID,但是我需要能够获取这三位经理的姓名,他们目前被困在那里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,
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