Puede ordenar con condicionales usando la función IF(). La documentación para IF()
estados:
IF(expr1,expr2,expr3)
Si expr1 es TRUE (expr1 <> 0 y expr1 <> NULL), entonces SI() devuelve expr2; de lo contrario, devuelve expr3. IF() devuelve un valor numérico o de cadena , según el contexto en el que se utiliza.
Así que usted puede utilizar para ordenar los elementos específicos en la parte superior de esta manera:
SELECT *
FROM fruit
ORDER BY
IF(name = 'Peach', 0, 1),
IF(name = 'Apple', 0, 1),
IF(name = 'Apricot', 0, 1),
name DESC
Esta es una serie de órdenes, con la primera prioridad más alta tomando. Entonces, si name='Peach'
, el valor será 0, para todos los demás, el valor será 1. Dado que en orden ASC predeterminado, 0 es anterior a 1, esto asegura que "Melocotón" estará en la parte superior de la lista. El segundo tipo de la serie especifica cómo romper los vínculos para el primer tipo. En este caso, todos los elementos excluyen 'Melocotón' empate en el primer género con el valor '1'. Y en este caso, 'Apple' se coloca en la parte superior de la lista de enlaces, que en realidad es el segundo lugar en la lista total. Etc ... hasta el último 'nombre DESC'.
Como la otra respuesta señala, CASE() es una alternativa a una serie de IF()
s:
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
La primera versión devuelve el resultado que el valor = compare_value. La segunda versión devuelve el resultado para la primera condición que es true. Si no hubo un valor de resultado coincidente, el resultado después de ELSE es devuelto, o NULO si no hay parte ELSE.