2014-06-10 81 views
1

問題: 創建部門名稱,管理員標識, 該部門的經理姓名(員工姓氏)以及每個 部門的平均工資列表。使用連接的SQL組功能

SELECT d.department_name, d.manager_id, AVG(e.salary) 
FROM employees e 
INNER JOIN departments d ON (e.department_id = d.department_id) 
GROUP BY d.department_name, d.manager_id; 

和它的作品不錯,但是當我加入e.last_name,我從員工表中的所有姓氏。

我確實相信答案是在這裏,並不是很遠,儘管我在這一點上達不到。

+0

所有姓氏是e.last_name選擇的。你能否提供一些關於你的數據/表格的提示? –

+0

謝謝你靈兒,你是對的:) – Novice

回答

2

爲了拉動經理的名字,你需要重新加入employees,這次d.manager_id

SELECT d.department_name, d.manager_id, m.name, AVG(e.salary) 
FROM employees e 
INNER JOIN departments d ON (e.department_id = d.department_id) 
LEFT OUTER JOIN employees m ON (m.employee_id = d.manager_id) 
GROUP BY d.department_name, d.manager_id, m.name; 

那種連接(內部或外部)不是必需的在這裏,因爲你按d.manager_id

2

看起來你需要加入d.manager_idemployees再次得到經理last_name

SELECT d.department_name, d.manager_id, e2.last_name, AVG(e.salary) 
FROM employees e 
INNER JOIN departments d ON e.department_id = d.department_id 
INNER JOIN employees e2 ON d.manager_id = e2.employee_id 
GROUP BY d.department_name, d.manager_id, e2.last_name 
+0

你不覺得它更多的是通過表達將它添加到組中嗎? – cy3er

+0

不,從我收集的OP中找到經理的姓氏。爲了得到那個,你必須再次鏈接到員工表。只要使用'e.last_name'就會給你每個員工的姓氏。 – Linger