我有一个MySQL表,并希望根据列值依次返回行:
E.g。 0,2,4,7,-2,-3,-5
答案 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
应该工作