Order By MySQL – Ordenar Resultados

Saludos estimado lector, en esta entrega te enseñaré como ordenar los resultados de un SELECT en MySQL, utilizando la clausura ORDER BY MySQL.

Que es ORDER BY

Cuando realizamos una consulta a una tabla en una base de datos utilizamos la sentencia SELECT, este resultado que obtenemos siempre viene ordenado por el orden en que fueron registrado en la tabla.

Para poder cambiar este orden necesitamos agregar ORDER BY a el SELECT, y este nos permitirá establecer el orden de los resultados.

MySQL SELECT con varias tablas - 
left join - inner join - right join - self join

Sintaxis

SELECT 
   campos
FROM 
   tabla
ORDER BY 
   columna1 [ASC|DESC], 
   columna2 [ASC|DESC]

En la sintaxis podemos ver que el ORDER BY está ubicado después de las tablas del FROM, es decir al final de la consulta.

Otra cosa a notar es que podemos especificar las columnas por las cuales serán ordenados los resultados, podemos especificar una o más columnas y no necesariamente tienen que estar ubicadas en el SELECT (algo que no es permitido en otros SGBD).

Y Por ultimo las palabras ASC y DESC, las cuales indican como deben ordenarse las filas o registros, ASC indica que los resultados serán ordenados de menor a mayor, entiéndase que si estamos tratando números serán desde el valor más pequeño hasta el más alto, y se hablamos de letras entonces serán ordenados desde la a hasta la z, en cuanto a la palabra DESC es el comportamiento contrario.

Ejemplos de ORDER BY

Las tablas utilizadas en los ejemplos está diponible para descargar aquí

order by

Vamos a mostrar el nombre de los productos con idProducto inferior a 10 y ordenarlo de menor a mayor.

SELECT IdProducto, NombreProducto  
FROM producto  
WHERE idProducto < 10  
ORDER BY IdProducto ASC
IdProducto NombreProducto
1Té Dharamsala
2Cerveza tibetana Barley
3Sirope de regaliz
4Especias Cajun del chef Anton
5Mezcla Gumbo del chef Anton
6Mermelada de grosellas de la abuela
7Peras secas orgánicas del tío Bob
8Salsa de arándanos Northwoods
9Buey Mishi Kobe

Si en cambio queremos ordenar de mayor a menor entonces tenemos que cambiar la clausura ASC por DESC.

SELECT IdProducto, NombreProducto  
FROM producto  
WHERE idProducto < 10  
ORDER BY IdProducto DESC
IdProductoNombreProducto
9Buey Mishi Kobe
8Salsa de arándanos Northwoods
7Peras secas orgánicas del tío Bob
6Mermelada de grosellas de la abuela
5Mezcla Gumbo del chef Anton
4Especias Cajun del chef Anton
3Sirope de regaliz
2Cerveza tibetana Barley
1Té Dharamsala

También es posible utilizar ORDER BY con varias columnas.

La tabla a utilizar es empleado

order-by

Como ejemplo mostraré los nombres de los empleados ordenados primero por nombre y luego por apellido.

SELECT Nombre, Apellidos
FROM empleado  
ORDER BY Nombre, Apellidos  
NombreApellidos
AndrewFuller
AnneDodsworth
JanetLeverling
LauraCallahan
MargaretPeacock
MichaelSuyama
NancyDavolio
RobertKing
StevenBuchanan

Quiero destacar que cuando no se especifica el tipo de ordenamiento (ASC o DESC), se asume que es ASC.

SELECT Nombre, Apellidos, Ciudad  
FROM empleado  
ORDER BY Nombre ASC, Apellidos DESC 

En este caso primero se ordena por nombre y una vez ordenado, entonces se ordena por apellido.

También es importante recordar que los campos o columnas no se ordenan independiente de sus filas, sino que las filas completas son las que son ordenadas.

ORDER BY con expresiones

También podemos ordenar los resultados utilizando cálculos y expresiones aritméticas.

Por ejemplo:

SELECT 
  IdPedido,
  IdProducto,
  PrecioUnidad * Cantidad
FROM 
  pedido_detalle
ORDER BY 
  PrecioUnidad *Cantidad ASC
IdPedidoIdProductoPrecioUnidad*Cantidad
10462 13 4.800000190734863
10281 19 7.300000190734863
10420 13 9.600000381469727
10850 33 10
10782 31 12.5
10623 24 13.5
11077 52 14
11038 52 14
10634 75 15.5
10341 33 16

Para evitar tener que poner la expresión en el SELECT y volver a repetirla en el ORDER BY podemos utilizar alias y así hacer el código más comprensible.

SELECT 
  IdPedido,
  IdProducto,
  PrecioUnidad * Cantidad AS total
FROM 
  pedido_detalle
ORDER BY 
  total ASC
IdPedidoIdProductoTotal
10462 13 4.800000190734863
10281 19 7.300000190734863
10420 13 9.600000381469727
10850 33 10
10782 31 12.5
10623 24 13.5
11077 52 14
11038 52 14
10634 75 15.5
10341 33 16

Ordenar con una lista personalizada

Para este ejemplo utilizaremos la tabla Empleado, y usaremos la funcion llamada FIELD().

SELECT 
 nombre, 
 apellido, 
 pais
FROM empleado
ORDER BY FIELD(
 pais,
'EE.UU.',
'Reino Unido'
)
NombreApellidosPais
Nancy Davolio EE.UU.
Andrew Fuller EE.UU.
Janet Leverling EE.UU.
Margaret Peacock EE.UU.
Laura Callahan EE.UU.
Steven Buchanan Reino Unido
Michael Suyama Reino Unido
Robert King Reino Unido
Anne Dodsworth Reino Unido
  

La función FIELD() trabaja mapeando los elementos que se le pasan como argumentos. Y en el orden que los establezcamos, ese sera el orden en que eran ordenados por el ORDER BY.

Hay que dejar claro que el primer parámetro es el nombre del campo que sera usado para ordenar.

Espero que este post te sea de mucha utilidad, no te olvides de compartir y valorar este contenido.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.