0Pricing
SQL Academy · Lekcja

Sortowanie według wielu kolumn

Rozstrzygaj remisy za pomocą dodatkowych kluczy sortowania

Sortowanie według wielu kolumn to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 2 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.

Problem remisów

Gdy sortowanie odbywa się według jednej kolumny, wiersze o tej samej wartości nie mają określonej kolejności względem siebie. Trzy produkty w cenie 20 mogą zostać zwrócone w dowolnej kolejności.

Aby kolejność była w pełni przewidywalna, należy dodać drugi klucz sortowania.

-- Ties on price are ordered arbitrarily
SELECT name, price
FROM products
ORDER BY price;

Określanie wielu kluczy sortowania

ORDER BY przyjmuje rozdzieloną przecinkami listę kolumn. Baza sortuje według pierwszej kolumny, następnie rozstrzyga remisy za pomocą drugiej i tak dalej.

W tym przykładzie produkty są sortowane według ceny, a remisy rozstrzyga się alfabetycznie według nazwy.

SELECT name, price
FROM products
ORDER BY price, name;

Kolejność kluczy ma znaczenie

Kolejność kolumn zmienia wynik. ORDER BY price, name to nie to samo co ORDER BY name, price.

Pierwszy klucz jest głównym kryterium sortowania; kolejne mają znaczenie tylko wtedy, gdy wcześniejsze wartości są równe.

-- Primary sort by category, then by name within each category
SELECT category, name
FROM products
ORDER BY category, name;

Kierunek sortowania dla każdej kolumny

Każdy klucz sortowania może mieć własny kierunek. Można swobodnie łączyć ASC i DESC.

To grupuje kategorie alfabetycznie, ale w każdej kategorii wyświetla najdroższe elementy jako pierwsze.

SELECT category, name, price
FROM products
ORDER BY category ASC, price DESC;

DESC działa dla pojedynczej kolumny

Częsty błąd polega na założeniu, że umieszczenie DESC na końcu odwraca całą kolejność. Wpływa ono tylko na kolumnę, która znajduje się bezpośrednio przed nim.

W ORDER BY category, price DESC category nadal jest sortowane rosnąco; malejąco sortowana jest tylko price.

-- category: ASC, price: DESC
SELECT category, price
FROM products
ORDER BY category, price DESC;

Trzy lub więcej kluczy

Można łączyć tyle kluczy sortowania, ile potrzeba. Każdy z nich jest uwzględniany dopiero wtedy, gdy wszystkie poprzedzające go klucze mają równe wartości.

Sortuj zamówienia według daty, następnie według klienta, a w ramach tego samego klienta i tej samej daty — według sumy.

SELECT created_at, customer_id, total
FROM orders
ORDER BY created_at DESC, customer_id, total DESC;

Stabilne, deterministyczne sortowanie

Aby uzyskać w pełni deterministyczny wynik, należy zakończyć klucze sortowania unikalną kolumną, taką jak klucz główny. Wtedy żadne dwa wiersze nie mogą mieć remisu.

Jest to ważne w przypadku paginacji, o której dowiedzą się Państwo w następnej lekcji.

SELECT id, name, price
FROM products
ORDER BY price DESC, id;

Łączenie wyrażeń i kolumn

Klucze sortowania mogą być połączeniem zwykłych kolumn i wyrażeń. Każdy klucz działa niezależnie.

To sortuje według malejącej wartości zapasów, a następnie alfabetycznie według nazwy jako kryterium rozstrzygającego remis.

SELECT name, price, stock
FROM products
ORDER BY price * stock DESC, name ASC;

Sortowanie według wartości logicznej w celu wysunięcia grupy

Przydatna sztuczka: sortowanie według wyrażenia logicznego pozwala przenieść grupę na początek lub koniec. W PostgreSQL false jest sortowane przed true.

To wyświetla najpierw elementy dostępne w magazynie (stock > 0), a następnie najtańsze elementy w każdej grupie.

SELECT name, stock, price
FROM products
ORDER BY (stock = 0), price;

Kontrolowanie położenia wartości NULL

Domyślnie w PostgreSQL wartość NULL jest sortowana na końcu przy sortowaniu rosnącym i na początku przy sortowaniu malejącym. Można to zmienić za pomocą NULLS FIRST lub NULLS LAST dla dowolnego klucza.

SELECT name, discount
FROM products
ORDER BY discount DESC NULLS LAST;

Łączenie wszystkich elementów

Realistyczne sortowanie według wielu kluczy może łączyć kierunek sortowania, wyrażenia i obsługę wartości NULL. Należy czytać je od lewej do prawej: każdy klucz doprecyzowuje działanie poprzedniego.

SELECT category, name, price, rating
FROM products
ORDER BY category ASC,
         rating DESC NULLS LAST,
         price ASC;

Szybki test

Rozważmy ORDER BY category, price DESC.

Podsumowanie

Sortowanie według wielu kolumn w skrócie:

  • Wymieniaj klucze sortowania po przecinku; wcześniejsze klucze mają pierwszeństwo
  • Każdy klucz ma własny kierunek ASC/DESC
  • Zakończ unikalną kolumną, aby uzyskać deterministyczną kolejność
  • Kontroluj brakujące wartości za pomocą NULLS FIRST/NULLS LAST

W następnej części ograniczą Państwo liczbę zwracanych wierszy za pomocą LIMIT i OFFSET.

SELECT category, name, price
FROM products
ORDER BY category ASC, price DESC, id;

Często zadawane pytania

Czy lekcja „Sortowanie według wielu kolumn” jest bezpłatna?

Tak — pełny tekst „Sortowanie według wielu kolumn” 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 „Sortowanie według wielu kolumn”?

Rozstrzygaj remisy za pomocą dodatkowych kluczy sortowania Ć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 2 z 4.

Ile czasu zajmuje lekcja „Sortowanie według wielu kolumn”?

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