2012-02-16 53 views
60

如何按字段排序DESC,但首先列出NULL值?mysql order by,null first,and DESC after

所以我有一個表:

reuestId | offerId | offerTitle 
1  | 1  | Alfa 
NULL  | 2  | Beta 
2  | 3  | Gamma 

我要選擇它們,這樣的結果將是:

NULL | 2 | Beta 
2 | 3 | Gamma 
1 | 1 | Alfa 

回答

118

試試這個:

ORDER BY [reuestId] IS NULL DESC, [reuestId] DESC 

應該工作(for mySql)

+0

或子查詢到類別 – delive 2016-02-04 15:03:55

23
SELECT * 
FROM TableX 
ORDER BY (requestId IS NOT NULL) 
     , requestId DESC 
+0

我認爲這個答案與第一個相反? – 2015-03-05 06:57:32

+1

@ xi.lin:不,第一個按照DESC順序放置'IS NULL' *(實質上是一個返回1或0的函數)*,這個按照升序放置'IS NOT NULL'。它們是相同的。 – 2015-04-02 03:52:25

+0

@ BlueRaja-DannyPflughoeft感謝您的解釋!我錯誤地認爲IS NULL是一個過濾器而不是一個函數。 – 2015-04-02 04:40:16