2015-10-21 48 views
2

我已經能夠獲取經理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 

我得到空白結果

回答

0

你必須joinemployee_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 
+0

這將忽略除部門經理以外的所有部門員工。 – JRD

+0

問題要求'經理'名稱,而不是'員工名字' –

+0

但他們仍然需要一個計數。該查詢不會計入非經理人員。 – JRD

0
inner join hr.employees e on d.department_id = e.department_id 
group by d.manager_id, e.first_name, e.last_name 

您需要另一個加入到員工獲取經理的名字。

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 
; 
0

的問題是與加盟。你有沒有嘗試過使用子查詢。像

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 
相關問題