Поиск…


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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow