Szukaj…


Użyj ORDER BY z TOP, aby zwrócić górne x wierszy na podstawie wartości kolumny

W tym przykładzie możemy użyć funkcji GROUP BY nie tylko określić rodzaj zwracanych wierszy, ale także jakie wiersze zwracane, ponieważ używamy TOP, aby ograniczyć zestaw wyników.

Powiedzmy, że chcemy zwrócić 5 najlepszych użytkowników o najwyższej reputacji z nienazwanej popularnej witryny pytań i odpowiedzi.

Bez ORDER BY

To zapytanie zwraca 5 pierwszych wierszy uporządkowanych domyślnie, czyli w tym przypadku „Id”, pierwsza kolumna w tabeli (nawet jeśli nie jest to kolumna pokazana w wynikach).

SELECT TOP 5 DisplayName, Reputation
FROM Users

zwroty...

Wyświetlana nazwa Reputacja
Społeczność 1
Geoff Dalgas 12567
Jarrod Dixon 11739
Jeff Atwood 37628
Joel Spolsky 25784

Z ORDER BY

SELECT TOP 5 DisplayName, Reputation
FROM Users
ORDER BY Reputation desc

zwroty...

Wyświetlana nazwa Reputacja
JonSkeet 865023
Darin Dimitrov 661741
BalusC 650237
Hans Passant 625870
Marc Gravell 601636

Uwagi

Niektóre wersje SQL (takie jak MySQL) używają klauzuli LIMIT na końcu SELECT zamiast TOP na początku, na przykład:

SELECT DisplayName, Reputation
FROM Users
ORDER BY Reputation DESC
LIMIT 5

Sortowanie według wielu kolumn

SELECT DisplayName, JoinDate, Reputation
FROM Users
ORDER BY JoinDate, Reputation
Wyświetlana nazwa JoinDate Reputacja
Społeczność 15.09.2008 1
Jeff Atwood 2008-09-16 25784
Joel Spolsky 2008-09-16 37628
Jarrod Dixon 2008-10-03 11739
Geoff Dalgas 2008-10-03 12567

Sortowanie według numeru kolumny (zamiast nazwy)

Możesz użyć numeru kolumny (gdzie skrajna lewa kolumna to „1”), aby wskazać kolumnę, na której ma opierać się sortowanie, zamiast opisywać kolumnę według nazwy.

Pro: Jeśli uważasz, że prawdopodobnie możesz później zmienić nazwy kolumn, nie spowoduje to uszkodzenia tego kodu.

Przeciw: Zasadniczo zmniejszy to czytelność zapytania (natychmiast wiadomo, co oznacza „ORDER BY Reputation”, podczas gdy „ORDER BY 14” wymaga pewnego liczenia, prawdopodobnie z palcem na ekranie).

To zapytanie sortuje wynik według informacji w pozycji względnej kolumny 3 od instrukcji select zamiast nazwy kolumny Reputation .

SELECT DisplayName, JoinDate, Reputation
FROM Users
ORDER BY 3
Wyświetlana nazwa JoinDate Reputacja
Społeczność 15.09.2008 1
Jarrod Dixon 2008-10-03 11739
Geoff Dalgas 2008-10-03 12567
Joel Spolsky 2008-09-16 25784
Jeff Atwood 2008-09-16 37628

Zamów przez Alias

Ze względu na logiczną kolejność przetwarzania zapytań alias może być używany w kolejności według.

SELECT DisplayName, JoinDate as jd, Reputation as rep
FROM Users
ORDER BY jd, rep

I może użyć względnej kolejności kolumn w instrukcji select. Zastanów się nad tym samym przykładem jak powyżej i zamiast używać aliasu użyj kolejności względnej, np. Dla wyświetlanej nazwy to 1, dla Jd to 2 itd.

SELECT DisplayName, JoinDate as jd, Reputation as rep
FROM Users
ORDER BY 2, 3

Dostosuj porządek sortowania

Aby posortować tę tabelę Employee według działu, należy użyć ORDER BY Department . Jeśli jednak chcesz mieć inną kolejność sortowania, która nie jest alfabetyczna, musisz odwzorować wartości Department na różne wartości, które sortują się poprawnie; można to zrobić za pomocą wyrażenia CASE:

Nazwa Departament
Hasan TO
Yusuf HR
Hillary HR
Joe TO
Wesoły HR
Rozpoznać Księgowy
SELECT *
FROM Employee
ORDER BY CASE Department
         WHEN 'HR'         THEN 1
         WHEN 'Accountant' THEN 2
         ELSE                   3
         END;
Nazwa Departament
Yusuf HR
Hillary HR
Wesoły HR
Rozpoznać Księgowy
Hasan TO
Joe TO


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow