2009-12-10 51 views
9

我有一個MySql查詢命令我的結果爲no column(int,可以爲null)。 簡單的例子:SQL ORDER by`no`在最後爲NULL

SELECT * FROM table ORDER BY no ASC

我想獲得一個結果排序像

1, 2, 3, 10, 52, 66, NULL, NULL, NULL

,但我得到

NULL, NULL, NULL, 1, 2, 3, 10, 52, 66

是否有可能與SQL查詢?

回答

24

你可以試試嗎?

ORDER BY ISNULL(no),no; 
+0

爲什麼不只是「ORDER BY ISNULL(no),no;」?如果爲空,則ISNULL已經返回1,否則返回0。 – OMA 2014-05-22 11:49:56

+0

是的,應該是我糾正! – YOU 2014-05-24 10:36:58

1

好吧,我想我明白了:

SELECT * FROM table WHERE no IS NOT NULL ORDER BY no ASC UNION
SELECT * FROM table WHERE no IS NULL

或者有什麼更好的辦法?

+0

這工作太:) – 2009-12-10 11:11:50

+0

但隨着複雜的查詢 - 幾個'JOIN's它會害怕。 :) – hsz 2009-12-10 11:16:43

2
SELECT * FROM table ORDER BY COALESCE(no,999999) ASC 

只要用更大的東西替換999999,如果你的數字自然大於這個數字。在 「nullableness」 第一和第二no

SELECT * 
FROM table 
ORDER BY case when no is null then 2 else 1 end, no 

此命令:

+0

當我的'no'達到'999999 + 1'時出現問題。 – hsz 2009-12-10 11:13:05

4

您可以使用CASE語句來調整排序。

2
SELECT * FROM table ORDER BY ISNULL(field), field ASC; 
+0

我認爲這是最好的答案,因爲它的簡單性 – OMA 2014-05-22 11:52:45

+0

好吧,現在用戶「你」改變了他的答案,現在接受的答案和現在一樣好;) – OMA 2014-05-24 17:10:27