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を正と負の中間にソートします。代わりにそれらをポジティブでグループ化するには、CASE代わりに使用できます(または、列が整数のみの場合は、わずかに魔法のようになります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 に答える