Wyszukiwanie rekordów Top-N
Pobieraj najwyższe i najniższe wartości
Wyszukiwanie rekordów Top-N to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Czym jest zapytanie Top-N
Zapytanie Top-N odpowiada na pytania takie jak: „jakie są 3 najdroższe produkty”, „jakie jest 10 najnowszych zamówień” lub „jakie jest 5 najniższych wyników”.
To po prostu sortowanie połączone z ograniczeniem liczby wyników, ale ponieważ taki wzorzec występuje bardzo często, zasługuje na własną nazwę.
-- Top 3 most expensive products
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 3;Rekordy Bottom-N
Aby znaleźć najmniejsze wartości, należy odwrócić kierunek. Należy sortować według ASC i pobrać pierwsze N wyników, aby otrzymać najtańsze, najstarsze lub najniższe wiersze.
-- 5 cheapest products
SELECT name, price
FROM products
ORDER BY price ASC
LIMIT 5;Dodawanie rozstrzygnięcia remisów
Jeśli kilka wierszy ma tę samą wartość graniczną, baza danych wybiera spośród nich w sposób arbitralny. Należy dodać unikatowy klucz pomocniczy, aby wynik był stabilny i powtarzalny.
SELECT id, name, price
FROM products
ORDER BY price DESC, id
LIMIT 3;Top-N po filtrowaniu
Top-N działa na przefiltrowanym zbiorze. Najpierw należy użyć klauzuli WHERE, aby ograniczyć kandydatów, a następnie posortować wyniki i ograniczyć ich liczbę.
W ten sposób można znaleźć 3 najdroższe produkty w kategorii „Books”.
SELECT name, price
FROM products
WHERE category = 'Books'
ORDER BY price DESC
LIMIT 3;Top-N po agregacji
Można również porządkować wartości obliczone. Należy pogrupować dane, wykonać agregację, a następnie posortować wynik agregacji i ograniczyć jego liczbę.
To zapytanie zwraca 5 klientów, którzy wydali łącznie najwięcej.
SELECT customer_id, SUM(total) AS spent
FROM orders
GROUP BY customer_id
ORDER BY spent DESC
LIMIT 5;Podejście z funkcjami rankingowymi
Funkcje okna, takie jak ROW_NUMBER(), przypisują rangę każdemu wierszowi. Należy opakować zapytanie i zachować wiersze, których ranga jest niska. Dzięki temu można obsługiwać przypadek „Top-N w każdej grupie”.
SELECT name, price
FROM (
SELECT name, price,
ROW_NUMBER() OVER (ORDER BY price DESC) AS rn
FROM products
) ranked
WHERE rn <= 3;RANK a ROW_NUMBER przy remisach
ROW_NUMBER() zawsze nadaje różne numery, dlatego zwraca dokładnie N wierszy nawet w przypadku remisów. RANK() nadaje wierszom z remisem ten sam numer, więc zapytanie „Top 3” może zwrócić więcej niż 3 wiersze, jeśli wystąpi remis na trzecim miejscu.
SELECT name, price,
RANK() OVER (ORDER BY price DESC) AS rnk
FROM products;Top-N w każdej grupie
Aby uzyskać najlepszy produkt w każdej kategorii, należy podzielić ranking według kategorii. PARTITION BY rozpoczyna numerowanie od nowa dla każdej grupy.
SELECT category, name, price
FROM (
SELECT category, name, price,
ROW_NUMBER() OVER (
PARTITION BY category
ORDER BY price DESC
) AS rn
FROM products
) t
WHERE rn = 1;DISTINCT ON — jeden wiersz na grupę
Element DISTINCT ON w PostgreSQL to zwięzły sposób na wybranie najlepszego wiersza z każdej grupy. Należy podać kolumnę grupującą, a następnie ustawić kolejność tak, aby żądany wiersz znajdował się jako pierwszy w swojej grupie.
SELECT DISTINCT ON (category)
category, name, price
FROM products
ORDER BY category, price DESC;Uwzględnianie remisów za pomocą WITH TIES
Jeśli chcą Państwo uzyskać 3 najlepsze wiersze, a także wszystkie wiersze remisujące z trzecim, należy użyć standardowej składni FETCH ... WITH TIES. Zwraca ona 3 wiersze oraz dodatkowe wiersze remisujące z ostatnim z nich.
SELECT name, price
FROM products
ORDER BY price DESC
FETCH FIRST 3 ROWS WITH TIES;Pojedyncza najlepsza wartość
W przypadku pojedynczego wiersza o najwyższej lub najniższej wartości wzorzec ORDER BY ... LIMIT 1 jest najprostszy, bardziej przejrzysty i często szybszy niż podzapytanie z MAX().
-- The single most recent order
SELECT id, total, created_at
FROM orders
ORDER BY created_at DESC
LIMIT 1;Szybkie sprawdzenie
Chcą Państwo uzyskać 3 najwyższe ceny, ale jeśli na trzecim miejscu wystąpi remis, chcą Państwo uwzględnić wszystkie remisujące wiersze.
Podsumowanie
Można już wyszukiwać rekordy Top-N na wszystkie najważniejsze sposoby:
ORDER BY ... LIMIT ndo tworzenia prostych list najlepszych lub najgorszych wyników- Należy dodać unikatowy klucz rozstrzygający remisy, aby wyniki były stabilne
ROW_NUMBER()lubDISTINCT ONdo wyszukiwania Top-N w każdej grupieFETCH ... WITH TIESdo zachowywania remisujących wierszy
To kończy omawianie sortowania, ograniczania wyników i zapytań Top-N. Można już nadawać uporządkowaną postać dowolnemu zbiorowi wyników.
SELECT name, price
FROM products
ORDER BY price DESC, id
LIMIT 3;Często zadawane pytania
Czy lekcja „Wyszukiwanie rekordów Top-N” jest bezpłatna?
Tak — pełny tekst „Wyszukiwanie rekordów Top-N” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Wyszukiwanie rekordów Top-N”?
Pobieraj najwyższe i najniższe wartości Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Wyszukiwanie rekordów Top-N”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Sortowanie za pomocą ORDER BY
- Sortowanie według wielu kolumn
- LIMIT i OFFSET
- Wyszukiwanie rekordów Top-N