CodeGym /Kursy /SQL SELF /Sortowanie danych (ORDER BY): rosnąco i malejąco (ASC, DE...

Sortowanie danych (ORDER BY): rosnąco i malejąco (ASC, DESC)

SQL SELF
Poziom 2 , Lekcja 3
Dostępny

Kiedy pracujesz z bazami danych, często chcesz widzieć jakiś porządek w danych. Na przykład:

  • "Pokaż mi top-10 najdroższych produktów."
  • "Jakie zamówienia były ostatnie?"
  • "Jaki jest wiek uczniów, zaczynając od najmłodszych?"

Chęć uporządkowania danych jest całkiem naturalna: nawet jeśli jesteś mega ogarniętym programistą, przeglądanie chaotycznego zbioru wierszy nie jest najprzyjemniejsze. Właśnie dlatego SQL daje nam narzędzie do sortowania wierszy w zwracanym wyniku — operator ORDER BY.

Podstawy sortowania z ORDER BY

ORDER BY — to taka magiczna różdżka, która pozwala uporządkować wiersze w wyniku. Bez niej dane zwracane są w "losowej" kolejności (to nie jest błąd bazy, po prostu kolejność nie jest gwarantowana).

Tak wygląda składnia ORDER BY:

SELECT kolumna1, kolumna2
FROM tabela
ORDER BY kolumna1 DESC;
  • kolumna1: nazwa kolumny, po której chcesz sortować.
  • ASC: sortowanie rosnąco (to domyślna wartość, więc możesz ją pominąć).
  • DESC: sortowanie malejąco.

Przykład

Załóżmy, że mamy tabelę students:

id name age
1 Alex 22
2 Maria 19
3 Otto 21

Posortujmy studentów po wieku (rosnąco):

SELECT name, age
FROM students
ORDER BY age ASC;

Wynik:

name age
Maria 19
Otto 21
Alex 22

Jeśli zmienisz kierunek sortowania na malejący:

SELECT name, age
FROM students
ORDER BY age DESC;

Wynik będzie taki:

name age
Alex 22
Otto 21
Maria 19

Sortowanie po kilku kolumnach

Czasem jedna kolumna do sortowania to za mało. Wyobraź sobie, że w bazie jest kilku studentów w tym samym wieku i chcesz dodać dodatkowe uporządkowanie, np. po imieniu.

Sortowanie po kilku kolumnach:

SELECT kolumna1, kolumna2
FROM tabela
ORDER BY kolumna1 DESC, kolumna2 ASC;

Przykład dla poniższej tabeli:

id name age
1 Alex 22
2 Maria 19
3 Otto 21
4 Anna 19

Zapytanie:

SELECT name, age
FROM students
ORDER BY age ASC, name ASC;

Wynik:

name age
Anna 19
Maria 19
Otto 21
Alex 22

Najpierw sortujemy po wieku (rosnąco), a w ramach tego samego wieku — po imieniu alfabetycznie.

Sortowanie z aliasami

Jeśli używasz aliasów (pseudonimów) dla kolumn, możesz też sortować po tych aliasach.

SELECT name AS "Imię", age AS "Wiek"
FROM students
ORDER BY "Wiek" DESC;

Wynik:

Imię Wiek
Alex 22
Otto 21
Maria 19

Dlaczego to ważne? Bo kiedyś tego nie było i były problemy z sortowaniem po wyliczanych kolumnach.

Sortowanie z wyliczanymi kolumnami

SQL pozwala robić obliczenia bezpośrednio w zapytaniu, a potem sortować po wynikach tych obliczeń.

Przykład 1. Najprostsze obliczenie

SELECT name, age, age * 2 AS doubled_age
FROM students
ORDER BY doubled_age DESC;

Wynik:

name age doubled_age
Alex 22 44
Otto 21 42
Maria 19 38

Przykład 2. Użycie funkcji Załóżmy, że trzymamy ceny produktów w tabeli products:

product_name price
Produkt A 100
Produkt B 200
Produkt C 150

A teraz sortujemy po zaokrąglonej cenie, pomnożonej przez 0.9 (np. z uwzględnieniem zniżki). Funkcja ROUND zwraca liczbę zaokrągloną do wybranego miejsca po przecinku.

SELECT product_name, price, ROUND(price * 0.9, 1) AS discounted_price
FROM products
ORDER BY discounted_price ASC;

Oto wynik:

product_name price discounted_price
Produkt A 100 90
Produkt C 150 135
Produkt B 200 180

Praktyczne zastosowanie sortowania

Sortowanie gra kluczową rolę w takich sytuacjach:

  • Tworzenie raportów, np. top-10 najlepszych sprzedaży w miesiącu.
  • Wyświetlanie danych w interfejsach użytkownika, np. lista zamówień posortowana po dacie.
  • Generowanie list do analityki, np. wyodrębnianie grup według priorytetu.

Typowe błędy przy użyciu ORDER BY

Błędy mogą czaić się na każdym kroku. Oto kilka rzeczy, na które warto uważać:

  • Jeśli próbujesz sortować po kolumnie, która nie istnieje, dostaniesz błąd: column "not_a_column" does not exist.
  • Sortowanie po aliasie, który jest używany w wyliczanej kolumnie, może być mylące, jeśli alias jest zadany na wyższym poziomie.
  • Jeśli przypadkiem zapomnisz podać kierunek sortowania, PostgreSQL domyślnie użyje ASC. To nie jest błąd, ale może dać nieoczekiwane wyniki.

Teraz już wiesz, jak ogarniać sortowanie w PostgreSQL za pomocą ORDER BY. Pamiętaj, że dobrze uporządkowane dane to połowa sukcesu przy pisaniu efektywnych zapytań SQL. Lecimy do następnego tematu! 😉

1
Ankieta/quiz
Wprowadzenie do SQL, poziom 2, lekcja 3
Niedostępny
Wprowadzenie do SQL
Wprowadzenie do SQL
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION