Mysql
 sql >> Base de données >  >> RDS >> Mysql

ORDER BY numéros positifs et négatifs séparément dans l'instruction MySQL

Peut utiliser SIGN pour trier les nombres positifs vers le haut, puis prendre la valeur absolue avec ABS pour obtenir l'ASC/DESC souhaité.

SELECT * FROM theTable
ORDER BY SIGN(col) DESC, ABS(col)

MODIFIER

Comme Nahuel l'a souligné, ce qui précède triera les 0 au milieu entre le positif et le négatif. Pour les regrouper à la place avec les positifs, vous pouvez utiliser un CASE à la place (ou, si votre colonne n'est que des entiers, le légèrement magique SIGN(col + 1) )

SELECT * FROM theTable
ORDER BY 
    CASE WHEN col >= 0 THEN 1 ELSE 2 END,
    ABS(col)