ORDER BY分别正面和& MySQL语句中的负数

时间:2012-07-01 14:00:56

标签: mysql sql sql-order-by

我有一个MySQL表,并希望根据列值依次返回行:

  • 如果列> gt = = 0
  • ,则首先升序
  • 如果列<0
  • ,则按降序排列

E.g。 0,2,4,7,-2,-3,-5

2 个答案:

答案 0 :(得分:9)

可以使用SIGN将正数排序到顶部,然后使用ABS获取绝对值以获得所需的ASC / DESC。

SELECT * FROM theTable
ORDER BY SIGN(col) DESC, ABS(col)

修改

正如Nahuel指出的那样,上面将把0分为中间正负两部分。要改为将它们与积极组合在一起,您可以改为使用CASE(或者,如果您的列只是整数,则会略显神奇SIGN(col + 1)

SELECT * FROM theTable
ORDER BY 
    CASE WHEN col >= 0 THEN 1 ELSE 2 END,
    ABS(col)

答案 1 :(得分:2)

SELECT columnName1 FROM Tbl
WHERE columnName1 >= 0
ORDER BY columnName1 ASC

UNION

SELECT columnName1 FROM Tbl
WHERE columnName1 < 0
ORDER BY columnName1 DESC

应该工作