Как найти 3 работников каждого деп-та с макс. зарплатой за 1 проход базы?
Задача - построить запрос для таблицы TABLE (columns: Employee, Department, Salary): за 1 проход бд (то есть как я понимаю, без вложенных sub-query with SELECT - или я неправ?) вернуть по 3 работника с максимальной зп в каждом департаменте.
Я написал пока что-то такое, но вложенный query видимо не подходит + не могу врубиться, как сделать LIMIT 3 для каждого департамента.
(Новичок пока, буду очень благодарен за помощь)
SELECT t.employee, t.department, t.salary
FROM (
SELECT department, MAX(salary) AS max_salary
FROM table GROUP BY employee
) AS x
INNER JOIN table AS t
ON t.department = x.department AND t.salary = x.max_salary
LIMIT 3;
SELECT *
FROM
(
SELECT Employee,
Department,
Salary,
ROW_NUMBER() OVER(PARTITION BY Department ORDER BY salary DESC) AS rn
FROM table
) AS t1
WHERE rn <= 3
OlegKrasnov87, обычно про проходы говорят когда речь о циклах идет, в контексте SQL запросов в первый раз слышу. Откуда такая формулировка про один проход, на собесе дали? Возможно, если сделать план запроса, то под капотом действительно будут циклы, лучше спросить у того, кто ставил задачу
mletov, да, уточнить формулировку там не у кого, к сожалению.
В принципе дословно написано "querying table only once". Может, это я затупил, а они имели ввиду типа "одним запросом", а не разбивкой на несколько. Можно это так понять, как думаете?