0Pricing
SQL Academy · Lekcja

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 n do tworzenia prostych list najlepszych lub najgorszych wyników
  • Należy dodać unikatowy klucz rozstrzygający remisy, aby wyniki były stabilne
  • ROW_NUMBER() lub DISTINCT ON do wyszukiwania Top-N w każdej grupie
  • FETCH ... WITH TIES do 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

  1. Sortowanie za pomocą ORDER BY
  2. Sortowanie według wielu kolumn
  3. LIMIT i OFFSET
  4. Wyszukiwanie rekordów Top-N
← Powrót do SQL Academy