Множественная сортировка по нескольким столбцам в SQL
Как отсортировать несколько столбцов в SQL в разных направлениях? Например, 'column1' необходимо отсортировать по убыванию, а 'column2' — по возрастанию.
5 ответ(ов)
Запрос ORDER BY column1 DESC, column2
сортирует результаты сначала по column1
в порядке убывания, а затем по column2
в порядке возрастания (что является значением по умолчанию), когда значения в column1
для двух или более строк одинаковые.
Другие ответы не содержат конкретного примера, поэтому вот он:
Предположим, у нас есть следующая таблица People:
FirstName | LastName | YearOfBirth
----------------------------------------
Thomas | Alva Edison | 1847
Benjamin | Franklin | 1706
Thomas | More | 1478
Thomas | Jefferson | 1826
Если вы выполните следующий запрос:
SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC
То результирующий набор данных будет выглядеть так:
FirstName | LastName | YearOfBirth
----------------------------------------
Thomas | More | 1478
Thomas | Jefferson | 1826
Thomas | Alva Edison | 1847
Benjamin | Franklin | 1706
Как видно, данные сначала сортируются по FirstName
в порядке убывания, а затем по YearOfBirth
в порядке возрастания. Всех имен Thomas
мы видим первыми, и они расположены по дате рождения от самого раннего к самому позднему. После всех записей с именем Thomas
идет запись с именем Benjamin
.
Этот SQL-запрос выбирает все столбцы из таблицы mytable
и сортирует результаты. Сортировка выполняется по столбцу column1
в порядке убывания (DESC), а затем по столбцу column2
в порядке возрастания (ASC). Таким образом, сначала будут отсортированы строки по column1
от большего к меньшему, а в случае равенства значений по этому столбцу, строки будут отсортированы по column2
от меньшего к большему.
Вы можете использовать множественную сортировку по нескольким условиям в SQL. В вашем случае это может выглядеть так:
ORDER BY
(CASE
WHEN @AlphabetBy = 2 THEN [Drug Name]
END) ASC,
(CASE
WHEN @TopBy = 1 THEN [Rx Count]
WHEN @TopBy = 2 THEN [Cost]
WHEN @TopBy = 3 THEN [Revenue]
END) DESC
В данном примере сортировка сначала будет осуществляться по названию лекарства, если @AlphabetBy
равно 2, а затем по одному из указанных полей ([Rx Count]
, [Cost]
или [Revenue]
), в зависимости от значения переменной @TopBy
.
Если вы хотите выбрать записи из таблицы и отсортировать их по нескольким столбцам, вы можете использовать оператор ORDER BY. Этот оператор помещается в конце вашего SQL-запроса.
После ключевого слова ORDER BY добавьте название столбца, по которому вы хотите сначала отсортировать записи (в нашем примере это salary
). Затем, после запятой, добавьте второй столбец (в данном случае last_name
). Вы можете изменять порядок сортировки (по возрастанию или убыванию) отдельно для каждого столбца. Если вы хотите использовать порядок по возрастанию (от меньшего к большему), можете использовать ключевое слово ASC; это ключевое слово является необязательным, так как это порядок по умолчанию, если не указано иное. Если вы хотите использовать порядок по убыванию, добавьте ключевое слово DESC после соответствующего столбца (в нашем примере мы использовали порядок по убыванию для столбца salary
).
Использование GROUP BY по нескольким столбцам
Как изменить порядок столбцов в DataFrame?
Поиск текста в хранимой процедуре в SQL Server
Сброс начального значения идентификатора после удаления записей в SQL Server
Переименование столбца в SQL Server 2008