MySQL ORDER BY

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:

ORDER BY column1 ASC;
Code language: SQL (Structured Query Language) (sql)

Y esta cláusula ORDER BY ordena el conjunto de resultados en orden descendente:

ORDER BY column1 DESC;
Code language: SQL (Structured Query Language) (sql)

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:

ORDER BY column1 ASC;
Code language: SQL (Structured Query Language) (sql)

y

ORDER BY column1;
Code language: SQL (Structured Query Language) (sql)

Si quieres ordenar el conjunto de resultados por varias columnas, especifica una lista de columnas separadas por comas en la cláusula ORDER BY:

ORDER BY column1, column2;
Code language: SQL (Structured Query Language) (sql)

Es posible ordenar el resultado por una columna en orden ascendente, y luego por otra columna en orden descendente:

ORDER BY column1 ASC, column2 DESC;
Code language: SQL (Structured Query Language) (sql)

En este caso, la cláusula ORDER BY:

  • Primero, ordena el conjunto de resultados por los valores del column1 en orden ascendente.
  • A continuación, ordena el conjunto de resultados ordenado por los valores en el column2 en orden descendente. Tenga en cuenta que el orden de los valores en el column1 no cambiará en este paso, sólo cambia el orden de los valores en el column2.

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.

SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname;
Code language: SQL (Structured Query Language) (sql)

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:

SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC;
Code language: SQL (Structured Query Language) (sql)

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:

SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC,contactFirstname ASC;
Code language: SQL (Structured Query Language) (sql)

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.

SELECT orderNumber, orderlinenumber, quantityOrdered * priceEachFROM orderdetailsORDER BY quantityOrdered * priceEach DESC;
Code language: SQL (Structured Query Language) (sql)

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:

SELECT orderNumber, orderLineNumber, quantityOrdered * priceEach AS subtotalFROM orderdetailsORDER BY subtotal DESC;
Code language: SQL (Structured Query Language) (sql)

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:

FIELD(status, 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped');
Code language: SQL (Structured Query Language) (sql)

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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *