MySQL ORDER BY

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:

ORDER BY column1 ASC;
Code language: SQL (Structured Query Language) (sql)

A ta ORDER BY klauzula sortuje zbiór wyników w porządku malejącym:

ORDER BY column1 DESC;
Code language: SQL (Structured Query Language) (sql)

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:

ORDER BY column1 ASC;
Code language: SQL (Structured Query Language) (sql)

i

ORDER BY column1;
Code language: SQL (Structured Query Language) (sql)

Jeśli chcesz posortować zbiór wyników według wielu kolumn, określasz listę kolumn oddzieloną przecinkami w klauzuli ORDER BY:

ORDER BY column1, column2;
Code language: SQL (Structured Query Language) (sql)

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:

ORDER BY column1 ASC, column2 DESC;
Code language: SQL (Structured Query Language) (sql)

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 w column1 nie zmieni się w tym kroku, zmieni się tylko kolejność wartości w column2.

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.

SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname;
Code language: SQL (Structured Query Language) (sql)

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:

SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC;
Code language: SQL (Structured Query Language) (sql)

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:

SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC,contactFirstname ASC;
Code language: SQL (Structured Query Language) (sql)

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.

SELECT orderNumber, orderlinenumber, quantityOrdered * priceEachFROM orderdetailsORDER BY quantityOrdered * priceEach DESC;
Code language: SQL (Structured Query Language) (sql)

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:

SELECT orderNumber, orderLineNumber, quantityOrdered * priceEach AS subtotalFROM orderdetailsORDER BY subtotal DESC;
Code language: SQL (Structured Query Language) (sql)

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:

FIELD(status, 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped');
Code language: SQL (Structured Query Language) (sql)

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?

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *