Top N w każdej grupie
Część sekcji Poza podstawami ścieżki SQL w Coddy. Lekcja 23 z 27.
„Najlepiej opłacany pracownik w każdym dziale” to klasyczny przykład. Schemat jest zawsze taki sam: ROW_NUMBER() z PARTITION BY, a następnie filtrowanie do wiersza 1.
WITH ranked AS (
SELECT name, department, salary,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rn
FROM employees
)
SELECT name, department, salary FROM ranked WHERE rn = 1Chcesz mieć 3 najlepsze wyniki zamiast 1? Zmień WHERE rn = 1 na WHERE rn <= 3. Chcesz uwzględniać remisy na szczycie? Zamień ROW_NUMBER() na RANK().
Wyzwanie
ŁatwyDostępne tabele i kolumny:
employees:id,name,department,salary
Zwróć najlepiej opłacanego pracownika w każdym dziale department. Wyświetl name, department i salary, posortowane według department. Jeśli dwóch pracowników ma taką samą najwyższą pensję w danym dziale, zwróć tylko jednego: tego z niższym id.
Spróbuj swoich sił
WITH ranked AS (
-- ROW_NUMBER() OVER (PARTITION BY department ORDER BY ...)
)
SELECT name, department, salary FROM ranked WHERE rn = 1
ORDER BY department
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Poza podstawami
3Agregacja warunkowa
COUNT z CASESUM z CASEPrzekształcanie wierszy w kolumnyPodsumowanie — źródła ruchu6Przepisy na analizy
Top N w każdej grupieProcent całościSuma narastającoJeden wiersz na kluczPodsumowanie — najlepsi klienciPoćwicz samodzielnie: Edytor online SQL