Поиск…
Используйте ORDER BY с TOP, чтобы вернуть верхние строки x на основе значения столбца
В этом примере мы можем использовать GROUP BY определяется не только вид из возвращаемых строк, но и какие строки будут возвращены, так как мы используем TOP ограничить набор результатов.
Предположим, мы хотим вернуть лучших 5 наивысших пользователей репутации из неназванного популярного сайта Q & A.
Без ORDER BY
Этот запрос возвращает верхние 5 строк, упорядоченных по умолчанию, в этом случае это «Id», первый столбец в таблице (хотя это не столбец, показанный в результатах).
SELECT TOP 5 DisplayName, Reputation
FROM Users
возвращается ...
| Отображаемое имя | репутации | 
|---|---|
| сообщество | 1 | 
| Джефф Далгас | 12567 | 
| Джаррод Диксон | 11739 | 
| Джефф Этвуд | 37628 | 
| Джоэл Спольский | 25784 | 
С ORDER BY
SELECT TOP 5 DisplayName, Reputation
FROM Users
ORDER BY Reputation desc
возвращается ...
| Отображаемое имя | репутации | 
|---|---|
| JonSkeet | 865023 | 
| Дарин Димитров | 661741 | 
| BalusC | 650237 | 
| Ханс Пассант | 625870 | 
| Марк Гравелл | 601636 | 
замечания
 Некоторые версии SQL (например, MySQL) используют предложение LIMIT в конце SELECT , а не TOP в начале, например: 
SELECT DisplayName, Reputation
FROM Users
ORDER BY Reputation DESC
LIMIT 5
Сортировка по нескольким столбцам
SELECT DisplayName, JoinDate, Reputation FROM Users ORDER BY JoinDate, Reputation
| Отображаемое имя | Дате вступления | репутации | 
|---|---|---|
| сообщество | 2008-09-15 | 1 | 
| Джефф Этвуд | 2008-09-16 | 25784 | 
| Джоэл Спольский | 2008-09-16 | 37628 | 
| Джаррод Диксон | 2008-10-03 | 11739 | 
| Джефф Далгас | 2008-10-03 | 12567 | 
Сортировка по столбцу (вместо имени)
Вы можете использовать номер столбца (где самый левый столбец равен «1»), чтобы указать, какой столбец будет содержать сортировку, вместо описания столбца по его имени.
Pro: Если вы считаете, что скорее всего, вы можете изменить имена столбцов позже, это не нарушит этот код.
Con: Это, как правило, снижает читаемость запроса (сразу же понятно, что означает «ORDER BY Reputation», в то время как «ORDER BY 14» требует некоторого подсчета, возможно, пальцем на экране.)
 Этот запрос сортирует результат по информации в относительной позиции столбца 3 из оператора select вместо имени столбца « Reputation . 
SELECT DisplayName, JoinDate, Reputation FROM Users ORDER BY 3
| Отображаемое имя | Дате вступления | репутации | 
|---|---|---|
| сообщество | 2008-09-15 | 1 | 
| Джаррод Диксон | 2008-10-03 | 11739 | 
| Джефф Далгас | 2008-10-03 | 12567 | 
| Джоэл Спольский | 2008-09-16 | 25784 | 
| Джефф Этвуд | 2008-09-16 | 37628 | 
Сортировать по Alias
Из-за логического порядка обработки запросов псевдоним может использоваться по порядку.
SELECT DisplayName, JoinDate as jd, Reputation as rep
FROM Users
ORDER BY jd, rep
И можете использовать относительный порядок столбцов в инструкции select. Рассмотрим тот же пример, что и выше, и вместо использования псевдонима используйте относительный порядок, например, для отображаемого имени: 1, для Jd - 2 и так далее
SELECT DisplayName, JoinDate as jd, Reputation as rep
FROM Users
ORDER BY 2, 3
Настроенный порядок сортировки
 Чтобы отсортировать эту таблицу Employee отдела, вы должны использовать ORDER BY Department . Однако, если вам нужен другой порядок сортировки, который не является алфавитным, вам необходимо сопоставить значения Department с разными значениями, которые сортируются правильно; это можно сделать с помощью выражения CASE: 
| название | отдел | 
|---|---|
| Hasan | ЭТО | 
| Юсуф | HR | 
| Hillary | HR | 
| Джо | ЭТО | 
| веселый | HR | 
| кругозор | бухгалтер | 
SELECT *
FROM Employee
ORDER BY CASE Department
         WHEN 'HR'         THEN 1
         WHEN 'Accountant' THEN 2
         ELSE                   3
         END;
| название | отдел | 
|---|---|
| Юсуф | HR | 
| Hillary | HR | 
| веселый | HR | 
| кругозор | бухгалтер | 
| Hasan | ЭТО | 
| Джо | ЭТО |