Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

ORDER BY separadamente números positivos e negativos na instrução MySQL


Pode usar SIGN para classificar os números positivos para o topo, pegue o valor absoluto com ABS para obter o ASC/DESC desejado.
SELECT * FROM theTable
ORDER BY SIGN(col) DESC, ABS(col)

EDITAR

Como Nahuel apontou, o acima classificará os 0's no meio entre positivo e negativo. Para agrupá-los com os positivos, você pode usar um CASE em vez disso (ou, se sua coluna for apenas números inteiros, o ligeiramente mágico SIGN(col + 1) )
SELECT * FROM theTable
ORDER BY 
    CASE WHEN col >= 0 THEN 1 ELSE 2 END,
    ABS(col)