Problem:
Musisz wyświetlić rekordy z danej tabeli posortowane według dwóch kolumn.
Przykład:
Nasza baza danych zawiera tabelę o nazwie employee
z następującymi kolumnami:id
, first_name
, last_name
i salary
.
id | imię | nazwisko | wynagrodzenie |
---|---|---|---|
1 | Lisa | Ułman | 3000 |
2 | Ada | Muller | 2400 |
3 | Thomas | Zielony | 2400 |
4 | Michael | Muller | 3000 |
5 | Maryi | Zielony | 2400 |
Wyświetlmy wszystkie informacje dla każdego pracownika, ale najpierw posortujmy rekordy według wynagrodzenia w kolejności malejącej, a następnie według nazwiska w kolejności rosnącej.
Rozwiązanie:
SELECT id, first_name, last_name, salary FROM employee ORDER BY salary DESC, last_name;
To zapytanie zwraca posortowane rekordy według dwóch kolumn:wynagrodzenie i nazwisko .
id | imię | nazwisko | wynagrodzenie |
---|---|---|---|
4 | Michael | M grubszy | 3000 |
1 | Lisa | U lman | 3000 |
3 | Thomas | G ponownie | 2400 |
5 | Maryi | G ponownie | 2400 |
2 | Ada | M grubszy | 2400 |
Dyskusja:
Jeśli chcesz wybrać rekordy z tabeli, ale chcesz zobaczyć je posortowane według dwóch kolumn, możesz to zrobić za pomocą ORDER BY
. Ta klauzula znajduje się na końcu zapytania SQL.
Po ORDER BY
słowa kluczowego, dodaj nazwę kolumny, według której chcesz najpierw posortować rekordy (w naszym przykładzie wynagrodzenie). Następnie po przecinku dodaj drugą kolumnę (w naszym przykładzie last_name
). Możesz zmienić porządek sortowania (rosnąco lub malejąco) oddzielnie dla każdej kolumny. Jeśli chcesz użyć porządku rosnącego (od niskiego do wysokiego), możesz użyć ASC
słowo kluczowe; to słowo kluczowe jest jednak opcjonalne, ponieważ jest to kolejność domyślna, gdy nie określono żadnego. Jeśli chcesz użyć kolejności malejącej, wpisz DESC
słowo kluczowe po odpowiedniej kolumnie (w przykładzie użyliśmy kolejności malejącej dla salary
kolumna).
W naszym przykładzie najpierw posortowaliśmy wynik według wynagrodzenia w porządku malejącym (od wyższych do niższych), a następnie według nazwiska w porządku rosnącym w ramach tych już posortowanych rekordów.