Podsumowanie: w tym poradniku dowiesz się jak posortować zbiór wyników używając MySQL ORDER BY
clause.
Wprowadzenie do MySQL ORDER BY clause
Kiedy używasz SELECT
statement do zapytania o dane z tabeli, zbiór wyników nie jest posortowany. Oznacza to, że wiersze w zbiorze wyników mogą być w dowolnej kolejności.
Aby posortować zbiór wyników, dodajemy klauzulę ORDER BY
do instrukcji SELECT
. Poniżej przedstawiono składnię klauzuli ORDER BY
:
W tej składni określasz jedną lub więcej kolumn, które chcesz posortować po klauzuli ORDER BY
.
Klauzula ASC
oznacza sortowanie rosnące, a DESC
oznacza sortowanie malejące. Używasz ASC
, aby posortować zestaw wyników w porządku rosnącym i DESC
, aby posortować zestaw wyników w porządku malejącym.
Ta ORDER BY
klauzula sortuje zbiór wyników w porządku rosnącym:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC;
A ta ORDER BY
klauzula sortuje zbiór wyników w porządku malejącym:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 DESC;
Domyślnie klauzula ORDER BY
używa ASC
jeśli nie określisz jawnie żadnej opcji.
W związku z tym następujące klauzule są równoważne:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC;
i
Code language: SQL (Structured Query Language) (sql)ORDER BY column1;
Jeśli chcesz posortować zbiór wyników według wielu kolumn, określasz listę kolumn oddzieloną przecinkami w klauzuli ORDER BY
:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1, column2;
Możliwe jest posortowanie wyniku według kolumny w kolejności rosnącej, a następnie według innej kolumny w kolejności malejącej:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC, column2 DESC;
W tym przypadku klauzula ORDER BY
:
- Najpierw posortuj zbiór wyników według wartości w kolumnie
column1
w kolejności rosnącej. - Następnie, posortuj posortowany zestaw wyników według wartości w
column2
w kolejności malejącej. Zauważ, że kolejność wartości wcolumn1
nie zmieni się w tym kroku, zmieni się tylko kolejność wartości wcolumn2
.
Zauważ, że klauzula ORDER BY
jest zawsze oceniana po klauzuli FROM
i SELECT
.
Przykłady MySQL ORDER BY
Do demonstracji wykorzystamy tabelę customers
z przykładowej bazy danych.
A) Wykorzystanie klauzuli MySQL ORDER BY do sortowania wartości w jednej kolumnie przykład
.
Następujące zapytanie wykorzystuje klauzulę ORDER BY
do posortowania klientów według wartości w kolumnie contactLastName
w porządku rosnącym.
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname;
Try It Out
Jeśli chcesz posortować klientów po nazwisku w kolejności malejącej, używamy DESC
po kolumnie contactLastname
w klauzuli ORDER BY
jak pokazano w poniższym zapytaniu:
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC;
Try It Out
B) Wykorzystanie klauzuli MySQL ORDER BY. do sortowania wartości w wielu kolumnach przykład
Jeśli chcesz posortować klientów według nazwiska w porządku malejącym, a następnie według pierwszego nazwiska w porządku rosnącym, określamy zarówno DESC
jak i ASC
w odpowiedniej kolumnie w następujący sposób:
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC,contactFirstname ASC;
Try It Out
W tym przykładzie, klauzula ORDER BY
najpierw sortuje zestaw wyników według ostatniego nazwiska w porządku malejącym, a następnie sortuje posortowany zestaw wyników według pierwszego nazwiska w porządku rosnącym, aby uzyskać ostateczny zestaw wyników.
C) Użycie MySQL ORDER BY do sortowania zbioru wyników według wyrażenia przykład
Zobacz następującą orderdetails
tabelę z przykładowej bazy danych.
Poniższe zapytanie wybiera pozycje wiersza zamówienia z tabeli orderdetails
. Oblicza sumę częściową dla każdej pozycji i sortuje zestaw wyników na podstawie sumy częściowej.
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, orderlinenumber, quantityOrdered * priceEachFROM orderdetailsORDER BY quantityOrdered * priceEach DESC;
Try It Out
Aby uczynić zapytanie bardziej czytelnym, można przypisać wyrażeniu w klauzuli SELECT
alias kolumny i użyć tego aliasu kolumny w klauzuli ORDER BY
, jak pokazano w poniższym zapytaniu:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, orderLineNumber, quantityOrdered * priceEach AS subtotalFROM orderdetailsORDER BY subtotal DESC;
Try It Out
W tym przykładzie, użyliśmy subtotal
jako aliasu kolumny dla wyrażenia quantityOrdered * priceEach
i posortowaliśmy zbiór wyników według aliasu subtotal
.
Alias kolumny może być użyty w klauzuli ORDER BY
, ponieważ klauzula SELECT
jest oceniana przed klauzulą ORDER BY
. Do czasu, gdy klauzula ORDER BY
zostanie oceniona, alias kolumny jest dostępny.
Używanie MySQL ORDER BY do sortowania danych przy użyciu niestandardowej listy
Klauzula ORDER BY
pozwala na sortowanie danych przy użyciu niestandardowej listy za pomocą funkcji FIELD()
.
Zobacz następującą tabelę orders
z przykładowej bazy danych.
Załóżmy, że chcesz posortować zamówienia sprzedaży na podstawie ich statusów w następującej kolejności:
- W Process
- On Hold
- Cancled
- Resolved
- Disputed
- Shipped
Aby to zrobić, możesz użyć funkcji FIELD()
, aby zmapować każdy status zamówienia do liczby i posortować wynik według wyniku funkcji FIELD()
:
Try It Out
Następujące wyrażenie:
Code language: SQL (Structured Query Language) (sql)FIELD(status, 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped');
zwraca indeks elementu status
na liście 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped'
.
Na przykład, jeśli status
jest In Process
, funkcja zwróci 1. Jeśli status
jest On Hold
, funkcja zwróci 2, i tak dalej.
W tym poradniku dowiedziałeś się, jak używać klauzuli MySQL ORDER BY
do sortowania wierszy w zbiorze wyników według jednej lub więcej kolumn w kolejności rosnącej lub malejącej.
- Czy ten poradnik był pomocny?
- TakNie
- Czy ten tutorial był pomocny?