2011-11-08 203 views
10

我想顯示最高平均工資;然而,我似乎無法讓它工作。如何查找最大平均值

我能獲得平均工資的列表,以顯示:

select worker_id, avg(salary) 
from workers 
group by worker_id; 

然而,當我嘗試顯示最大平均工資的一個列表:

select max (avg(salary)) 
from (select worker_id, avg(salary) 
     from workers 
     group by worker_id); 

它不」運行。我收到「無效標識符」錯誤。我如何使用每個工人的平均工資來找出每個工人的最高平均工資?

謝謝。

+2

我期望被叫WORKER_ID列是一個表稱爲工的主鍵。如果是這樣,AVG()工資將是整個表的平均值,MAX(AVG())工資只是AVG()工資。但是,我懷疑這只是一個簡單的數據模型。 – APC

+0

另一種可能性是表格的關鍵字是worker_id和日期的組合 - 如果是這樣,則按天數加權平均值可能比簡單算術平均值更有用。 –

回答

19

集合函數(例如avg)產生的列通常會獲得任意名稱。只需使用一個別名,並選擇是:

select max (avg_salary) 
from (select worker_id, avg(salary) AS avg_salary 
    from workers 
    group by worker_id); 
+0

這會選擇最高的平均工資,但不會聲明WorkerID分配給哪個工資。使用它來添加ID也[平均值的最大值](http://stackoverflow.com/questions/2439627/maximum-of-averages) – Takedasama

-1

你也可以用單一select說明(結合兩種maxavg)這樣

select max(avg(salary)) max_avg_salary 
from workers 
group by worker_id; 
0

您可以修復查詢做到這一點由子查詢中添加列別名到列,像這樣:

select max(avg_salary) 
from (select worker_id, avg(salary) avg_salary 
     from workers 
     group by worker_id); 

然而,如果worker_id唯一標識RECO在職工表RDS,這是功能上等同於(可以簡化爲):

select max(salary) from workers; 
1
select worker_id, avgsal 
from 
(
    select worker_id, avg(salary) as avgsal 
    from workers 
    group by worker_id 
) 
where avgsal=(select max(avgsal) 
       from (select worker_id, avg(salary) as avgsal 
        from workers group by worker_id)) 

這將顯示最高平均作業人員ID一起

0
select max(a.high)Avg_highest_salary, 
     e.dept 
from (
    select avg(salary) high,dept from emp group by dept) a, 
    emp e 
where a.dept = e.dept 
group by e.dept 
order by max(a.high) desc 

它會顯示高平均最高工資先與部門

如果你不要想顯示薪酬與部門,那麼你可以使用這個

select max(avg(salary)) max_avg_salary 
from emp 
group by dept; 
0

使用WITH子句也可以做到

with averagesal as (
select dept_id d_id, avg(sal) avgsal from emp_details group by dept_id) 
select * from averagesal where avgsal = (select max(avgsal) from averagesal); 
-1

正如所解釋的here 可以使用

SELECT worker_id, AVG(salary) 
FROM workers 
GROUP BY worker_id 
HAVING AVG(salary) = (SELECT MAX(AVG(salary)) FROM workers GROUP BY worker_id) 
0

您可以在此第一行按平均值降序排列的方式查找

通過avgsalary降序選擇頂部1 worker_id,AVG(工資)作爲avgsalary 從工人 組由worker_id 順序