Как найти максимальное среднее

Я пытаюсь показать максимальную среднюю зарплату; однако я не могу заставить его работать.

Я могу получить список средних зарплат для отображения:

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;