首先按null排序,然后按其他变量排序

时间:2009-08-28 15:53:15

标签: mysql

这是我现在的代码:

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,请按{排序} {1}}

这可能吗?

我使用mysql。

3 个答案:

答案 0 :(得分:20)

这样的事情:

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

如果number为NULL,则按条件的第一个顺序为0;否则1
这意味着每行将编号为NULL的行将在其他行之前

请注意,无论如何,ids也会被排序。

你会得到这样的东西:

  • 数字无效; ID = 1
  • 数字无效; ID = 2
  • 数字无效; ID = 5
  • 数字无效; ID = 8
  • 数字不为空; ID = 3
  • 数字不为空; ID = 4
  • 数字不为空; ID = 7
  • 数字不为空; ID = 10
  • 数字不为空; ID = 12

答案 1 :(得分:1)

如果参数为null,则ISNULL()函数返回1,否则返回0。

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

请注意,性能可怕取决于需要订购多少个值:根据ORDER BY列不会使用任何索引。

答案 2 :(得分:-1)

也可以使用Union。

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;