5

我有一个 MySQL 表,并希望按以下顺序根据列值返回行:

  • 如果列 >=0,则为第一个升序
  • 如果列 <0,则降序排列

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

4

2 回答 2

14

可以用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)
于 2012-07-01T14:05:44.660 回答
2
SELECT columnName1 FROM Tbl
WHERE columnName1 >= 0
ORDER BY columnName1 ASC

UNION

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

应该管用

于 2012-07-01T14:04:15.123 回答