Порядок нескольких столбцов в SQL

Как я могу сортировать по нескольким столбцам в SQL и в разных направлениях. column1 будет отсортирован по убыванию, а column2 по возрастанию.


person Señor Reginold Francis    schedule 12.01.2010    source источник
comment
Это первый результат поиска в Google. По крайней мере, это было, когда я искал в Google порядок сортировки по двум столбцам. Это намного более читабельно, чем эквивалентная официальная страница документа, которая даже не появлялась на моей первой странице результатов, пока я не изменил свой запрос на mysql 'order by'   -  person vowel-house-might    schedule 30.01.2014
comment
Учитывая, как часто вопрос SO приходит на первое место в Google, я всегда считаю ужасным, что люди отвечают на него. ТАК либо здесь, чтобы ответить, либо нет, и я не могу понять, почему направлять трафик сайта - это хорошо.   -  person user001    schedule 16.10.2015


Ответы (5)


ORDER BY column1 DESC, column2

Это сортирует все сначала по column1 (по убыванию), а затем по column2 (по возрастанию, по умолчанию), когда поля column1 для двух или более строк равны.

person Ignacio Vazquez-Abrams    schedule 12.01.2010
comment
здесь как заказать столбец1 или столбец2? - person PoliDev; 18.06.2013
comment
@PoliDev, он сначала упорядочивает по столбцу 1 в порядке DESCending и по столбцу 2 (в порядке ASCending) - person zaheer; 13.03.2014
comment
Для ясности здесь все сортируется сначала по column1, а затем по column2, если поля column1 для двух строк равны. - person Nick Benes; 29.05.2014
comment
Я предполагаю, что это будет работать и для дополнительных столбцов? - person user001; 16.10.2015
comment
Он будет работать для любого количества выражений (не только столбцов) до предела вашей СУБД. - person Ignacio Vazquez-Abrams; 16.10.2015
comment
@NickBenes ... или можно сказать: он сортирует по column2, а затем выполняет СТАБИЛЬНУЮ сортировку по column1. Это более понятно для людей, которые знают, что такое стабильная сортировка. - person Atom; 03.10.2016
comment
@ IgnacioVazquez-Abrams Результат остается прежним, я имею в виду, что он упорядочивается только по первому столбцу, а не после него. - person 3 rules; 16.01.2017
comment
скажем, у меня есть набор результатов с тремя столбцами. Я хочу иметь первый столбец в моем наборе результатов в DESC, второй столбец в наборе результатов в ASC и третий столбец в наборе результатов в DESC. Как мне это сделать? - person Deepak Keynes; 10.03.2018

В других ответах отсутствует конкретный пример, поэтому вот оно:

Учитывая следующую таблицу Люди:

 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
person Thomas C. G. de Vilhena    schedule 18.01.2014
comment
Этот ответ является отличным дополнением к очень полезному и короткому принятому ответу. - person enderland; 31.05.2014
comment
Это хороший пример, многие думают, что как вы можете отсортировать 2 столбца за один раз, чего на самом деле не происходит, даже если вы поместите 2 столбца для запроса заказа - person Muhammad Faraz; 28.09.2014
comment
Он дает те же результаты, когда мы сортируем по трем столбцам, и порядок сортировки первого столбца такой же, а в остальном все отличается. Пример:: 1.Firstname asc, Lastname desc, yearOfBirst asc and 2.Firstname asc, Lastname desc, yearOfBirst desc Есть ли способ преодолеть это? - person Paramesh Korrakuti; 17.04.2018
comment
@ParameshKorrakuti: Это ожидаемый результат. Результирующий порядок в вашем примере будет отличаться только в том случае, если есть повторяющиеся FirstName, LastName записи с разными YearOfBirth - person Thomas C. G. de Vilhena; 20.04.2018
comment
Спасибо за пример, он помогает людям вроде меня понять. - person thippu; 09.01.2020

Порядок нескольких столбцов зависит от соответствующих значений обоих столбцов: Вот мой пример таблицы, в которой два столбца названы алфавитами и числами, а значения в этих двух столбцах - порядки asc и desc. .

введите описание изображения здесь

Теперь я выполняю Порядок в этих двух столбцах, выполнив команду ниже:

введите описание изображения здесь

Теперь я снова вставляю новые значения в эти два столбца, где значение Alphabet в порядке ASC:

введите описание изображения здесь

и столбцы в таблице примеров выглядят следующим образом. Теперь снова выполните ту же операцию:

введите описание изображения здесь

Вы можете видеть, что значения в первом столбце находятся в порядке убывания, а во втором столбце - не в порядке ASC.

person Jason Clark    schedule 08.12.2016
comment
также вставьте эти данные (g, 10),(g,12). Затем запустите свой запрос по порядку, вы получите второй столбец как ASC порядок (что означает g-10,g-11,g-12) - person Pugal; 05.05.2018

Вы можете использовать множественный заказ при нескольких условиях,

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 
person Mohammad Atiour Islam    schedule 03.02.2017
comment
Работает ли индексация, если я использую CASE внутри ORDER BY? - person Rousonur Jaman; 10.09.2017

SELECT id,  
  first_name,
  last_name,
  salary
FROM employee
ORDER BY salary DESC, last_name; 

Если вы хотите выбрать записи из таблицы, но хотите, чтобы они были отсортированы по двум столбцам, вы можете сделать это с помощью ORDER BY. Это предложение находится в конце вашего SQL-запроса.

После ключевого слова ORDER BY добавьте название столбца, по которому вы хотите сначала отсортировать записи (в нашем примере - зарплата). Затем после запятой добавьте второй столбец (в нашем примере last_name). Вы можете изменить порядок сортировки (по возрастанию или по убыванию) отдельно для каждого столбца. Если вы хотите использовать возрастающий (от меньшего к большему) порядок, вы можете использовать ключевое слово ASC; это ключевое слово является необязательным, так как это порядок по умолчанию, когда ничего не указано. Если вы хотите использовать порядок убывания, поместите ключевое слово DESC после соответствующего столбца (в этом примере мы использовали порядок убывания для столбца зарплаты).

person Sospeter Mong'are    schedule 29.06.2021