2011-11-08 205 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 顺序