Как найти максимальное среднее
Я пытаюсь показать максимальную среднюю зарплату; однако я не могу заставить его работать.
Я могу получить список средних зарплат для отображения:
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);
он не запускается. Я получаю ошибку "недопустимый идентификатор". Как я могу использовать среднюю зарплату для каждого работника, чтобы найти максимальный средний показатель для каждого работника?
Спасибо.
Ответы
Ответ 1
Столбцы, полученные из агрегатных функций (например, avg), обычно получают произвольные имена. Просто используйте для него псевдоним и выберите:
select max(avg_salary)
from (select worker_id, avg(salary) AS avg_salary
from workers
group by worker_id);
Ответ 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))
Это будет отображать наибольшее среднее значение вместе с идентификатором работника
Ответ 3
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));
Это также должно работать
Ответ 4
Вы можете исправить запрос, добавив псевдоним столбца в столбец в подзапросе, например:
select max(avg_salary)
from (select worker_id, avg(salary) avg_salary
from workers
group by worker_id);
Однако, если worker_id
однозначно идентифицирует записи в рабочей таблице, это функционально эквивалентно (может быть упрощено):
select max(salary) from workers;
Ответ 5
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
Он покажет высокую среднюю высшую зарплату сначала с dept
Если вы не хотите показать Зарплата с делом, вы можете использовать этот
select max(avg(salary)) max_avg_salary
from emp
group by dept;
Ответ 6
используя предложение 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);
Ответ 7
Как объяснено здесь
вы можете использовать
SELECT worker_id, AVG(salary)
FROM workers
GROUP BY worker_id
HAVING AVG(salary) = (SELECT MAX(AVG(salary)) FROM workers GROUP BY worker_id)
Ответ 8
Вы можете таким образом, чтобы первая строка сортировалась по убыванию в зависимости от среднего find
выберите top 1 worker_id, avg (зарплата) как авгсалар от рабочих group by worker_id порядок по avgsalary desc
Ответ 9
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)
Ответ 10
Вам следует попробовать следующий подход:
select avg(salary) as max_avg_salary from Salaries group by emp_no order by avg(salary) desc limit 1;
Ответ 11
fooobar.com/questions/525099/... показывает следующую ошибку
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 ;
Ответ 12
Вы также можете сделать это с помощью одного оператора select
(сочетающего как max
, так и avg
), как этот
select max(avg(salary)) max_avg_salary
from workers
group by worker_id;