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