如何找到最大平均值

时间:2011-11-08 13:07:18

标签: sql oracle

我试图显示最高平均工资;但是,我似乎无法让它发挥作用。

我可以获得要显示的平均工资列表:

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

它没有运行。我收到“无效标识符”错误。如何使用每个工人的平均工资来找到每个工人的最大平均工资?

感谢。

15 个答案:

答案 0 :(得分:26)

由聚合函数(例如avg)生成的列通常会获得任意名称。只需为它使用别名,然后选择:

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

我猜这也应该起作用

答案 3 :(得分:0)

您可以通过在子查询中向列添加列别名来修复查询,如下所示:

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

但是,如果worker_id唯一标识workers表上的记录,则这在功能上等同于(可以简化为):

select max(salary) from workers;

答案 4 :(得分: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;

答案 5 :(得分: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);

答案 6 :(得分:0)

正如所解释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) 

答案 7 :(得分:0)

您可以通过这种方式将第一行按照平均查找值降序排序

选择前1名worker_id,avg(薪水)作为avgsalary       来自工人       group by worker_id       由avgsalary desc命令

答案 8 :(得分:0)

select Dep_name
from 
(
  select Dep_name , avg(Salary) as avgsal 
  from salary
  group by Dep_name
) sal1
where avgsal=(select  max(avgsal) 
              from (select Dep_name , avg(salary) as avgsal 
                    from salary group by Dep_name) sal2)

答案 9 :(得分:0)

您应该尝试以下方法:

select avg(salary) as max_avg_salary from Salaries group by emp_no order by avg(salary) desc limit 1;

答案 10 :(得分:0)

https://stackoverflow.com/a/8050885/12190487显示以下错误

ER_DERIVED_MUST_HAVE_ALIAS: Every derived table must have its own alias

为您要从中选择的新形成的列使用别名

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

答案 11 :(得分:0)

这对我有用。

from (select avg(salary) AS avg_salary
       from employees
      group by Name) AS T;

答案 12 :(得分:0)

gettersMatch || settersMatch

尝试上面的一个。

答案 13 :(得分:0)

在以前的答案启发下,这是如何获取worker_id的方法:

SELECT worker_id, MAX(avg_salary)
FROM (SELECT worker_id, AVG(salary) AS avg_salary
      FROM workers
      GROUP BY worker_id);

答案 14 :(得分:-1)

您也可以使用单个select语句(同时合并maxavg)来执行此操作

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