2015-09-16 114 views
0

我有一個按降序排列數字列的查詢。本專欄(附圖中的YTD%)是正數和負數的組合。 ORDER BY ytd DESC先顯示正值最高的數據,依此類推。
但是我想按降序排列(所以正數在負數之前),但數字從最低正數到最高數,最低負數到最高負數。所以,1.50,5.10,7.10等爲mysql查詢指定兩個不同的排序順序

image showing current sort order

回答

0

您可以使用多個鍵和表情在order by

order by (ytd > 0) desc, -- put positive numbers first 
     ytd asc 
+0

超..感謝的快速反應... – mkocansey

0

取決於你想要什麼,你可以做

ORDER BY 
    SIGN(ytd) DESC, 
    ABS(ytd) ASC 

先得到所有正數從低到高的數值,然後從負數到負數得到所有負數,在這兩者之間爲零。
換句話說,

1 
3 
3 
5 
6 
0 
-3 
-8 
-10 

如果你想有個零來之前正數,使用

ORDER BY 
    SIGN(SIGN(ytd) + 1) DESC, 
    ABS(ytd) ASC 

這將產生

0 
1 
3 
3 
5 
6 
-3 
-8 
-10 

應你想要消極和posi略去值間雜,只是其絕對值排序,只需使用

ORDER BY 
    ABS(ytd) ASC, 
    ytd DESC 

這將產生

0 
1 
3 
-3 
3 
5 
6 
-8 
-10