MySQL: порядок по двум столбцам с NULL последний? - PullRequest
3 голосов
/ 28 июля 2011

Я знаю, что есть похожие вопросы по SO, но, к сожалению, я не нашел ответ на свой вопрос, поэтому спрашиваю здесь.

Моя структура таблицы результатов выглядит следующим образом:

id    item_id   price    group
-------------------------------
1     3472      NULL      
2     234       300      1
3     4872      150      1
4     1109      100
5     5582      300      0
6     144       150      2
7     1384      NULL     1
8     627       100      2

* Столбец 1006 * может иметь значения NULL, а столбец group может содержать пустые результаты.

Таблица сортируется по цене.

Что мне нужно:

  1. Заказать набор результатов по двум столбцам - цена и группа

  2. Результаты с одинаковыми price должны быть заказанысначала по группам (по возрастанию) результаты с той же ценой, но без группы идут за ними.

  3. NULL всегда должны быть последними независимо от порядка сортировки price (DESC или ASC).

Итак, таблица с порядком должна выглядеть так:

id    item_id   price    group
-------------------------------
8     627       100      2
4     1109      100
3     4872      150      1
6     144       150      2
5     5582      300      0
2     234       300      1
7     1384      NULL     1
1     3472      NULL      

Когда мне нужно сделать заказ с NULL в последний раз, я использую что-то вроде:

ORDER BY ISNULL(column), column

И упорядочение по нескольким столбцам обычно не является проблемой, но я просто придерживался этого.Я провел несколько часов безрезультатно.

1 Ответ

5 голосов
/ 28 июля 2011
ORDER BY IF( ISNULL( price ), 1, 0 ), price, IF( group='', 1, 0 ), group ASC
...