2016-03-02 87 views
3

排第一ASC的非空值,比方說,我有我的fruits表中的這些記錄:查詢之前,空

id | name | order 
----|--------|------- 
1 | Apple | 1 
2 | Banana | null 
3 | Orange | 2 
4 | Grapes | null 

我應該怎麼查詢,以便結果會是這樣的:

id | name | order 
----|--------|------- 
1 | Apple | 1 
3 | Orange | 2 
2 | Banana | null 
4 | Grapes | null 

基本上我想具有非空值order這些記錄是在頂行中,然後用空order這些記錄字母順序排列。我怎樣才能完成這樣的任務?

回答

0

你可以使用ISNULL

如果expr是NULL,ISNULL()返回1,否則返回0

SELECT id, name, `order` 
FROM fruits 
ORDER BY ISNULL(`order`), `order`, name; 

SqlFiddleDemo

輸出:

╔═════╦═════════╦════════╗ 
║ id ║ name ║ order ║ 
╠═════╬═════════╬════════╣ 
║ 1 ║ Apple ║ 1  ║ 
║ 3 ║ Orange ║ 2  ║ 
║ 2 ║ Banana ║ (null) ║ 
║ 4 ║ Grapes ║ (null) ║ 
╚═════╩═════════╩════════╝ 
+1

謝謝!不知道我可以在訂購時使用'ISNULL' – morcen

0

試試這個:

SELECT id, name, `order` 
FROM mytable 
ORDER BY IF(`order` IS NULL, 2, 1), 
     `order`, 
     name 

IF條件將有效地把NULL值在結果集的結尾。