我试图显示最高平均工资;但是,我似乎无法让它发挥作用。
我可以获得要显示的平均工资列表:
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);
它没有运行。我收到“无效标识符”错误。如何使用每个工人的平均工资来找到每个工人的最大平均工资?
感谢。
答案 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
语句(同时合并max
和avg
)来执行此操作
select max(avg(salary)) max_avg_salary
from workers
group by worker_id;