使用mysql按NULL值排序

时间:2013-08-02 07:46:49

标签: mysql sql sql-order-by

我有一张这样的表:

id            description status   login
XWPggD        bbbbbbbb    1        js
0JIERf        test1       1        js
0gd2x0        nothing     NULL     js
bSIUIu        dev         NULL     bob
0BNh27        hello       1        js
2TYXjd        down        NULL     inge
axE1m5        bobby       NULL     bob
1iSlQM        qwe         0        js
9dPjoP        descr       NULL     inge

我正在尝试按状态(底部的空值)然后通过登录对输出进行排序。 但我也想要正确排序状态为NULL的登录值,以便它看起来像:

id            description status   login
XWPggD        bbbbbbbb    1        js
0JIERf        test1       1        js
0BNh27        hello       1        js
1iSlQM        qwe         0        js
axE1m5        bobby       NULL     bob
bSIUIu        dev         NULL     bob
9dPjoP        descr       NULL     inge
2TYXjd        down        NULL     inge
0gd2x0        nothing     NULL     js

但是当我尝试这样的事情时:

SELECT id, description, status, login FROM dev
ORDER BY isnull(status) ASC, isnull(login) ASC;

我总是得到一个奇怪的登录顺序,状态值为NULL。

3 个答案:

答案 0 :(得分:10)

为什么这么复杂的答案......

SELECT id, description, status, login FROM dev
ORDER BY status IS NULL, status DESC, login IS NULL, login DESC

答案 1 :(得分:4)

SELECT id, description, status, login FROM dev
ORDER BY (Case when status is null then -1 Else status End ) Desc,
(Case when login is null then -1 Else 1 End ) Desc

答案 2 :(得分:1)

尝试使用colaesce功能,如下所示

SELECT id, description, status, login 
FROM dev
ORDER BY COALESCE(status,-1) ASC, COALESCE(login,-1) ASC