Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Вопрос-Ответ Новый топик    Ответить
 sql наибольшая зарплата сотрудника по каждому отделу  [new]
wiremann
Member

Откуда:
Сообщений: 3
Здравствуйте, подскажите пж-та, только начинаю изучать sql, возник вопрос: есть таблица mytable с 3 столбцами: employee(сотрудник), department(отдел), salary(зарплата). Необходимо найти наибольшую зарплату сотрудника в каждом отделе, вывести сотрудника и сумму. Я могу найти найти наибольшую зарплату среди всех отделов, но не могу понять, как с помощью group by найти по каждому отделу.
Среди всех отделов ищу так:
select employee, salary from mytable where salary=(select max(salary) from mytable);
17 ноя 20, 18:55    [22234080]     Ответить | Цитировать Сообщить модератору
 Re: sql наибольшая зарплата сотрудника по каждому отделу  [new]
Aklin
Member

Откуда: Прямо сейчас меня здесь нет
Сообщений: 60389
Что именно не получается?

Пособие для студентов и школьников

Сообщение было отредактировано: 17 ноя 20, 20:05
17 ноя 20, 20:09    [22234137]     Ответить | Цитировать Сообщить модератору
 Re: sql наибольшая зарплата сотрудника по каждому отделу  [new]
wiremann
Member

Откуда:
Сообщений: 3
автор
Что именно не получается?


Если я пытаюсь в group by указать только department:
select employee, salary from mytable where salary=(select max(salary) from mytable) group by department;


То, конечно, получаю ошибку
column "mytable.employee" must appear in the GROUP BY clause or be used in an aggregate function

Если в group by указываю все столбцы, то в результате запрос отрабатывает, но результат возвращается не такой, как я ожидаю ( возвращается аналогичный тому, как я изначально выполнял запрос без group by, т.е. выводится одна запись с наибольшей зарплатой по всем отделам, а не как нужно, по каждому)
18 ноя 20, 10:08    [22234389]     Ответить | Цитировать Сообщить модератору
 Re: sql наибольшая зарплата сотрудника по каждому отделу  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20765
WITH cte AS ( SELECT department, employee, salary, RANK() OVER (PARTITION BY department ORDER BY salary DESC) rnk
              FROM mytable )
SELECT department, employee, salary
FROM cte
WHERE rnk = 1
18 ноя 20, 11:45    [22234452]     Ответить | Цитировать Сообщить модератору
Все форумы / Вопрос-Ответ Ответить