我有一个 MySQL 表,并希望按以下顺序根据列值返回行:
- 如果列 >=0,则为第一个升序
- 如果列 <0,则降序排列
例如 0,2,4,7,-2,-3,-5
我有一个 MySQL 表,并希望按以下顺序根据列值返回行:
例如 0,2,4,7,-2,-3,-5
可以用SIGN将正数排在最前面,然后用ABS取绝对值,得到想要的 ASC/DESC。
SELECT * FROM theTable
ORDER BY SIGN(col) DESC, ABS(col)
编辑
正如 Nahuel 指出的那样,上面将 0 排序到正负之间的中间。要将它们与正数分组,您可以使用 aCASE
代替(或者,如果您的列只是整数,则稍微神奇SIGN(col + 1)
)
SELECT * FROM theTable
ORDER BY
CASE WHEN col >= 0 THEN 1 ELSE 2 END,
ABS(col)
SELECT columnName1 FROM Tbl
WHERE columnName1 >= 0
ORDER BY columnName1 ASC
UNION
SELECT columnName1 FROM Tbl
WHERE columnName1 < 0
ORDER BY columnName1 DESC
应该管用