为mysql查询指定两个不同的排序顺序

时间:2015-09-16 11:27:00

标签: mysql sql sorting

我有一个查询按降序对数字列进行排序。此列(附图中的YTD%)是正数和负数的混合。 ORDER BY ytd DESC首先显示具有最高正值的数据,依此类推 然而,我想按降序排列列(因此正数在负数之前),但数字从最小正数到最高值,最小负数到最高负数。所以1.50,5.10,7.10等。

image showing current sort order

2 个答案:

答案 0 :(得分:0)

您可以在order by

中使用多个键和表达式
order by (ytd > 0) desc,  -- put positive numbers first
         ytd asc

答案 1 :(得分: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

如果您希望混合使用负值和正值,只需按其绝对值进行排序,只需使用

即可
ORDER BY
    ABS(ytd) ASC,
    ytd DESC

会产生

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