La respuesta está en la pregunta:
La palabra clave aquí es "expresión" . Puede usar expresiones en el ORDER BY
cláusula.
ORDER BY -order_line_groups.sequence DESC
es una expresión aritmética y el "guión" no es un guión sino un signo menos; un operador matemático menos unario.
¿Cómo funciona?
En cuanto al resultado, funciona como se esperaba:
-
Si el tipo de columna
order_line_groups.sequence
es un tipo numérico o un tipo de fecha y hora (también se almacenan internamente como números), luego el signo menos invierte el orden de las filas devueltas. La cláusula es equivalente aORDER BY order_line_groups.sequence ASC
-
Si el tipo de la columna es tipo de cadena luego MySQL intenta convertir los valores de la columna a números (porque la resta es una operación aritmética y no está definida para cadenas). Cuando MySQL convierte cadenas en números, se detiene en el primer carácter que no es un dígito. Dependiendo de los datos que almacene en la columna
order_line_groups.sequence
, más o menos de sus valores de cadena se convertirán en el número0
.
Con respecto a la velocidad, como se explica en la página de documentación provista en la pregunta MySQL no puede usar índices para resolver el ORDER BY
. Esto hace que la consulta sea lenta.
Conclusión
Usando ORDER BY -order_line_groups.sequence
hace que la consulta sea lenta. Además, no proporciona una buena manera de ordenar el conjunto de resultados cuando el tipo de columna sequence
es un tipo de cadena.