2016-11-25 39 views
0

我有兩個數據表員工和部門。我想顯示每個部門的員工數量,每個部門的平均工資等等。我的代碼是:Incoorect計數結果

select d.department_id, d.department_name, count(e.last_name) Employees, 
avg(e.salary) Avg_Salary, e.last_name, e.salary, e.job_id 
from departments d, employees e 
where d.department_id = e.department_id 
group by d.department_id, d.department_name, e.last_name, e.salary, e.job_id 
order by d.department_id; 

此代碼運行良好,但員工數和平均工資的結果並不是我正在尋找的。我的結果是:

Department_ID Department_Name Employees Avg_Salary Last_Name Salary Job_ID 
------------- --------------- --------- ---------- --------- ------ ------ 
10   Administration 1   4400  Whalen 4400 AD_ASST 
20   Marketing  1   6000  Fay  6000 MK_REP 
20   Marketing  1   13000  Hartstein 13000 MK_MAN 

正如您所看到的,員工數顯示1爲每個員工,而不是每個部門的總數;並且Avg_Salary與薪水相同,而不是每個部門的實際工資平均值。

這是結果我想:

Department_ID Department_Name Employees Avg_Salary Last_Name Salary Job_ID 
------------- --------------- --------- ---------- -------- ------ ------ 
10    Administration 1   4400  Whalen 4400 AD_ASST 
20    Marketing  2   9500  Fay  6000 MK_REP 
20    Marketing  2   9500  Smith  13000 MK_MAN 

我該如何解決這個問題?

回答

1

這應該做到這一點 - 使用分析功能:

select d.department_id, d.department_name, 
     count(e.last_name) over (partition by d.department_id) Employees, 
     avg(e.salary) over (partition by d.department_id) Avg_Salary, 
     e.last_name, e.salary, e.job_id 
from departments d, employees e 
where d.department_id = e.department_id 
order by d.department_id; 
+0

謝謝託尼!這工作! – Tim