SQLPytanie 06 z 14
TOP 3 pensje w każdym dziale
Najpierw odpowiedz na głos lub w myślach, potem porównaj.
Odpowiedź
Najpierw ustalam, czy chodzi o trzy osoby, czy trzy różne wysokości pensji. Poniżej zwracam wszystkie osoby z trzech najwyższych poziomów płacy.
SQL
-- employees(id, department_id, salary)
WITH ranked AS (
SELECT id, department_id, salary,
DENSE_RANK() OVER (
PARTITION BY department_id ORDER BY salary DESC
) AS place
FROM employees
WHERE salary IS NOT NULL
)
SELECT id, department_id, salary
FROM ranked
WHERE place <= 3
ORDER BY department_id, salary DESC, id;Remisy: DENSE_RANK daje 1,2,2,3; RANK daje 1,2,2,4. ROW_NUMBER numeruje każdą osobę osobno — przy nim dopisuję id do sortowania dla deterministycznego wyboru.
Jak poszło? Bądź szczery — „Jeszcze nie” dodaje pytanie do powtórki.