在MySQL语句中单独订购正数和负数

Lau*_*llo 4 mysql sql sql-order-by

我有一个MySQL表,并希望按此顺序返回基于列值的行:

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

例如0,2,4,7,-2,-3,-5

Bor*_*ort 10

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

SELECT * FROM theTable
ORDER BY SIGN(col) DESC, ABS(col)
Run Code Online (Sandbox Code Playgroud)

编辑

正如Nahuel指出的那样,上面将把0分为正负两个中间.要用积极的方式对它们进行分组,你可以使用a CASE(或者,如果你的列只是整数,那就是有点神奇SIGN(col + 1))

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

  • +1因为它更简洁,但可能是一个问题0.按顺序排列col> = 0然后1 else 2 end,abs(col) (2认同)