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 są 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 |