Впорядкування декількох стовпців SQL


635

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

Як я можу це зробити?


85
Це перший результат "гугл відповідей". Принаймні, це було, коли я гуглив "замовлення sql на дві колонки". Це пекло набагато легше для читання, ніж еквівалентна офіційна сторінка doc, яка навіть не з’явилася на моїй першій сторінці результатів, поки я не змінив запит на "mysql 'order by" "
Ендрю Мартін

11
З огляду на те, як часто питання SO надходить на вершину Google, мені завжди страшно, що люди відповідають на нього. Так що тут або відповісти, чи ні, і я не можу зрозуміти, чому спрямування трафіку на сайті - це добре
user001

Відповіді:


1023
ORDER BY column1 DESC, column2

Це сортує все за column1(спаданням) спочатку, а потім column2(за зростанням, що є за замовчуванням), коли column1поля для двох або більше рядків рівні.


2
тут як замовити або колонку1 або колонку2?
PoliDev

@PoliDev, Він спочатку замовляє колонку1 у порядку DESCending та the column2 (у порядку ASCending)
zaheer

110
Для наочності це сортує все column1спочатку, а потім, column2коли column1поля на два ряди рівні.
Нік Бенеш

2
Він буде працювати для будь-якої кількості виразів ( не тільки стовпців), аж до обмеження вашого RDBMS.
Ігнасіо Васкес-Абрамс

2
@ NickBenes ... або можна сказати: він сортує за, column2а потім виконує СТАБІЛЬНЕ сортування за column1. Це зрозуміліше для людей, які знають, що таке стабільне сортування.
Атом

356

Іншим відповідям не вистачає конкретного прикладу, тому тут йдеться:

Враховуючи таку таблицю Люди :

 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

23
Ця відповідь є чудовим доповненням до дуже корисної та короткої прийнятої відповіді.
Ендерленд

3
Це хороший приклад, багато хто думає, що як можна сортувати 2 стовпчики одночасно, що насправді не відбувається, навіть якщо ви поставите 2 стовпчики для запиту замовлення
Мухаммед Фараз

Це дає ті самі результати, коли ми сортуємо з трьома стовпцями, і порядок сортування перших стовпців однаковий, а в іншому все відрізняється. Наприклад: 1.Firstname asc, Lastname desc, yearOfBirst asc and 2.Firstname asc, Lastname desc, yearOfBirst desc Чи є спосіб, що ми можемо це подолати?
Параміш Корракуті

1
@ParameshKorrakuti: Очікуваний результат. Отримане впорядкування у вашому прикладі відрізнятиметься лише за наявності дублюючих FirstName, LastNameзаписів з чіткими ознакамиYearOfBirth
Thomas CG de Vilhena

Дякую за приклад, це змушує людей, як я, розуміти.
thippu


19

Упорядкування декількох стовпців залежить від відповідних значень обох стовпців: Ось мій приклад таблиці, де є два стовпчики з іменами Alphabets and Numbers, а значення цих двох стовпців - порядки asc та desc .

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

Тепер я виконую Order By у цих двох стовпцях, виконуючи команду нижче:

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

Тепер знову вставляю нові значення в ці два стовпці, де значення алфавіту в порядку ASC :

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

і стовпці в таблиці Приклад виглядають приблизно так. Тепер знову виконайте ту саму операцію:

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

Ви можете бачити, що значення в першому стовпці знаходяться в порядку desc, але другий стовпець не в порядку ASC.


також вставити ці дані (g, 10),(g,12). Потім запустіть запит на замовлення, ви отримаєте другий стовпець як ASCзамовлення (це означаєg-10,g-11,g-12)
Пугал

6

Ви можете використовувати кілька замовлень у кількох умовах,

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 

Чи працює індексація, якщо я використовую "CASE" всередині "ORDER BY"?
Русонур Джаман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.