Resumen: en este tutorial, aprenderá a ordenar un conjunto de resultados utilizando la cláusula ORDER BY de MySQL.
Introducción a la cláusula ORDER BY de MySQL
Cuando se utiliza la sentencia SELECT para consultar datos de una tabla, el conjunto de resultados no está ordenado. Esto significa que las filas del conjunto de resultados pueden estar en cualquier orden.
Para ordenar el conjunto de resultados, se añade la cláusula ORDER BY a la sentencia SELECT. A continuación se ilustra la sintaxis de la cláusula ORDER BY:
En esta sintaxis, se especifica la o las columnas que se quieren ordenar después de la cláusula ORDER BY.
El ASC significa ascendente y el DESC significa descendente. Se utiliza ASC para ordenar el conjunto de resultados en orden ascendente y DESC para ordenar el conjunto de resultados en orden descendente.
Esta cláusula ORDER BY ordena el conjunto de resultados en orden ascendente:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC;
Y esta cláusula ORDER BY ordena el conjunto de resultados en orden descendente:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 DESC;
Por defecto, la cláusula ORDER BY utiliza ASC si no se especifica explícitamente ninguna opción.
Por lo tanto, las siguientes cláusulas son equivalentes:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC;
y
Code language: SQL (Structured Query Language) (sql)ORDER BY column1;
Si quieres ordenar el conjunto de resultados por varias columnas, especifica una lista de columnas separadas por comas en la cláusula ORDER BY:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1, column2;
Es posible ordenar el resultado por una columna en orden ascendente, y luego por otra columna en orden descendente:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC, column2 DESC;
En este caso, la cláusula ORDER BY:
- Primero, ordena el conjunto de resultados por los valores del
column1en orden ascendente. - A continuación, ordena el conjunto de resultados ordenado por los valores en el
column2en orden descendente. Tenga en cuenta que el orden de los valores en elcolumn1no cambiará en este paso, sólo cambia el orden de los valores en elcolumn2.
Nota que la cláusula ORDER BY siempre se evalúa después de la cláusula FROM y SELECT.
Ejemplos de ORDER BY en MySQL
Utilizaremos la tabla customers de la base de datos de ejemplo para la demostración.
A) Uso de la cláusula ORDER BY de MySQL para ordenar los valores de una columna ejemplo
.
La siguiente consulta utiliza la cláusula ORDER BY para ordenar los clientes por los valores de la columna contactLastName en orden ascendente.
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname;
Prueba
Si quieres ordenar los clientes por el apellido en orden descendente, se utiliza el DESC después de la columna contactLastname en la cláusula ORDER BY como se muestra en la siguiente consulta:
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC;
Prueba
B) Uso de la cláusula ORDER BY de MySQL. para ordenar valores en múltiples columnas ejemplo
Si quieres ordenar los clientes por el apellido en orden descendente y luego por el nombre en orden ascendente, especifica tanto DESC como ASC en la columna correspondiente de la siguiente manera:
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC,contactFirstname ASC;
Prueba
En este ejemplo, la cláusula ORDER BY ordena el conjunto de resultados por el último nombre en orden descendente primero y luego ordena el conjunto de resultados ordenados por el primer nombre en orden ascendente para producir el conjunto de resultados final.
C) Uso de MySQL ORDER BY para ordenar un conjunto de resultados por una expresión de ejemplo
Vea la siguiente orderdetails tabla de la base de datos de ejemplo.
La siguiente consulta selecciona las partidas de pedido de la tabla orderdetails. Calcula el subtotal de cada partida y ordena el conjunto de resultados en función del subtotal.
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, orderlinenumber, quantityOrdered * priceEachFROM orderdetailsORDER BY quantityOrdered * priceEach DESC;
Prueba
Para hacer la consulta más legible, puedes asignar a la expresión de la cláusula SELECT un alias de columna y utilizar ese alias de columna en la cláusula ORDER BY como se muestra en la siguiente consulta:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, orderLineNumber, quantityOrdered * priceEach AS subtotalFROM orderdetailsORDER BY subtotal DESC;
Prueba
En este ejemplo, hemos utilizado subtotal como alias de columna para la expresión quantityOrdered * priceEach y hemos ordenado el conjunto de resultados por el subtotal alias.
El alias de columna se puede utilizar en la cláusula ORDER BY porque la cláusula SELECT se evalúa antes que la cláusula ORDER BY. En el momento en que la cláusula ORDER BY se evalúa, el alias de la columna es accesible.
Usando MySQL ORDER BY para ordenar los datos usando una lista personalizada
La cláusula ORDER BY permite ordenar los datos usando una lista personalizada mediante la función FIELD().
Vea la siguiente tabla orders de la base de datos de ejemplo.
Suponga que desea ordenar los pedidos de venta en función de sus estados en el siguiente orden:
- En proceso
- En espera
- Cancelado
- Resuelto
- Disputado
- Enviado
Para ello, puedes utilizar la función FIELD() para mapear cada estado del pedido a un número y ordenar el resultado por el resultado de la función FIELD():
Prueba
La siguiente expresión:
Code language: SQL (Structured Query Language) (sql)FIELD(status, 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped');
Devuelve el índice del status en la lista 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped'.
Por ejemplo, si el status es In Process, la función devolverá 1. Si el status es On Hold, la función devolverá 2, y así sucesivamente.
En este tutorial, ha aprendido a utilizar la cláusula ORDER BY de MySQL para ordenar las filas del conjunto de resultados por una o más columnas en orden ascendente o descendente.
- ¿Ha sido útil este tutorial?
- SíNo
Se puede decir que este tutorial ha sido útil.