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
- Sortowanie za pomocą ORDER BY
- Sortowanie według wielu kolumn
- LIMIT i OFFSET
- Wyszukiwanie rekordów Top-N