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