Сначала упорядочить по нулю, затем по другой переменной - PullRequest
7 голосов
/ 28 августа 2009

это мой код на данный момент:

SELECT id, number
FROM Media
WHERE user = 10
ORDER BY id, number

но я хочу, чтобы это выглядело так:

SELECT id, number
FROM Media
WHERE user = 10
ORDER BY while(number IS NULL), id

Я хочу, чтобы все number были NULL в верхней части результата, но как только number не будет NULL, сортируйте по id

Это возможно?

Я использую mysql.

Ответы [ 3 ]

20 голосов
/ 28 августа 2009

что-то вроде этого:

SELECT id, number
FROM Media
WHERE user = 10
ORDER BY (case when number is null then 0 else 1 end), id

Если число равно NULL, первый порядок по критериям будет 0; еще 1
Это означает, что каждая строка будет иметь значение NULL, прежде чем остальные

И обратите внимание, что идентификаторы тоже будут отсортированы.

Вы получите что-то вроде этого:

  • число ноль; ID = 1
  • число ноль; ID = 2
  • число ноль; ID = 5
  • число ноль; ID = 8
  • номер не нулевой; ID = 3
  • номер не нулевой; ID = 4
  • номер не нулевой; ID = 7
  • номер не нулевой; ID = 10
  • номер не нулевой; ID = 12
1 голос
/ 13 декабря 2012

Функция ISNULL () возвращает 1, если параметр равен нулю, и 0 в противном случае.

SELECT id, number
FROM Media
WHERE user = 10
ORDER BY ISNULL(number) DESC, id

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

0 голосов
/ 28 августа 2009

Союз может быть использован также.

SELECT id, number
FROM Media
WHERE user = 10 AND number IS NULL
ORDER BY id

UNION

SELECT id, number
FROM Media
WHERE user = 10 AND number IS NOT NULL
ORDER BY id, number;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...