Ordenar usando el valor de algún campo es sencillo. Basta con referirse al nombre del campo en la cláusula order by. Pero cuando el criterio de ordenación no es un campo, sino una expresión (con funciones u operadores) encontráis dificultades para referiros en el order by a esa expresión usada en el select. Aquí explicamos algunas formas de hacerlo.
Una dificultad con la que os encontráis a menudo es utilizar una de las expresiones que se listan en el select para ordenar el resultado de una consulta. Por ejemplo, queremos ordenar el siguiente listado por orden de edad, es decir, usando la misma expresión que aparece en el select en segundo lugar:
select id,
truncate(datediff(current_date(), fNac)/365, 0)
from Persona
order by ?????;
¿Qué podemos poner en el lugar de esas ????? Lo primero que se os suele ocurrir es repetir la misma expresión del select en el order by:
select id,
truncate(datediff(current_date(), fNac)/365, 0)
from Persona
order by truncate(datediff(current_date(), fNac)/365, 0);
Funciona. Pero no es necesario, ni eficiente. Se pueden hacer varias cosas:
- Poner un alias en el select y usarlo en el order by:
MEJOR
select id, truncate(datediff(current_date(), fNac)/365, 0) as Edad from Persona order by Edad;
- Incluso se puede usar un alias con varias palabras, pero en ese caso, si se usa MySQL, en el order by hay que usar OBLIGATORIAMENTE los acentos invertidos para referir al alias
MEJOR
select id, truncate(datediff(current_date(), fNac)/365, 0) as 'Edad persona' from Persona order by `Edad persona`;
MALorder by "Edad persona"; # o order by 'Edad persona';
- Referir al número de orden de la expresión en el select. Como en este ejemplo estamos usando la segunda, podemos poner:
MEJOR
select id, truncate(datediff(current_date(), fNac)/365, 0) from Persona order by 2;
No hay comentarios:
Publicar un comentario