Поиск…
Используйте 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 | ЭТО |
| Джо | ЭТО |