Как найти максимальную среднюю - PullRequest
15 голосов
/ 08 ноября 2011

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

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

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

это не работает. Я получаю ошибку "неверный идентификатор". Как использовать среднюю зарплату для каждого работника, чтобы найти максимальную среднюю заработную плату для каждого работника?

Спасибо.

Ответы [ 10 ]

26 голосов
/ 08 ноября 2011

Столбцы, полученные из агрегатных функций (например, avg), обычно получают произвольные имена.Просто используйте для него псевдоним и выберите на нем:

select max(avg_salary)
from (select worker_id, avg(salary) AS avg_salary
      from workers
      group by worker_id);
2 голосов
/ 06 марта 2013
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))

Это покажет самое высокое среднее вместе с идентификатором работника

1 голос
/ 27 ноября 2018
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));

Это также должно работать, я думаю

0 голосов
/ 06 мая 2019
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)
0 голосов
/ 10 июня 2016

Таким образом, вы можете отсортировать первую строку по убыванию на основе среднего значения поиска

выбрать топ 1 worker_id, avg (зарплата) как avgsalary из группы рабочих по порядку worker_id по avgsalary desc

0 голосов
/ 26 апреля 2015

Как объяснено здесь вы можете использовать

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 голосов
/ 24 ноября 2014

с помощью предложения 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);
0 голосов
/ 15 марта 2013
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;
0 голосов
/ 08 ноября 2011

Вы можете исправить запрос, добавив псевдоним столбца в столбец внутри подзапроса, например так:

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;
0 голосов
/ 08 ноября 2011

Вы также можете сделать это с помощью одного оператора select (объединяя max и avg), например,

select max(avg(salary)) max_avg_salary
from workers
group by worker_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...