Volver a la lista de artículos Artículos
Lectura de 7 minutos

Cómo ordenar registros con la cláusula ORDER BY

Las bases de datos relacionales no almacenan los registros en orden alfabético, numérico, ascendente ni en ningún orden en particular. La única forma de ordenar los registros en el conjunto de resultados es utilizar la cláusula ORDER BY. Puede utilizar esta cláusula para ordenar las filas por una columna, una lista de columnas o una expresión. También puede ordenar las filas utilizando la expresión CASE.

En este artículo, echaremos un vistazo a la cláusula ORDER BY - cómo escribirla, cómo funciona y qué hace.

Sintaxis ORDER BY

La cláusula ORDER BY se utiliza para ordenar las filas de una tabla de resultados. Esta es su sintaxis:

SELECT list_column
FROM table
ORDER BY column ;

Uso de ORDER BY con una columna

El ejemplo de abajo muestra registros en la tabla furniture_data que han sido ordenados de forma ascendente según la columna furniture. Ascendente es el orden por defecto en una cláusula ORDER BY.

SELECT id, furniture, points
FROM furniture_data
ORDER BY furniture ;

Como puede ver, la cláusula ORDER BY se coloca después de la sentencia FROM. Después de la palabra clave ORDER BY, tenemos la columna o columnas por las que se ordenarán las filas. En otras palabras, le está diciendo a la base de datos "Tome las columnas id, furniture, y points de la furniture_data y ordénalas en base a la columna de muebles".

Puede especificar cómo se ordenan los resultados, ya sea en orden ascendente (A-Z) o descendente (Z-A). Para el orden ascendente, puede utilizar la palabra clave ASC, pero no es necesario. Para el orden descendente, debe utilizar la palabra clave DESC.

Por lo tanto, después del nombre de la columna, puede poner la palabra clave ASC o DESC. El ejemplo siguiente ordena los datos en orden ascendente por la columna "furniture":

SELECT id, furniture, points
FROM furniture _data
ORDER BY furniture ASC ;

Recuerda que no necesitas la palabra clave ASC para especificar una ordenación ascendente; SQL lo hace por defecto.

A continuación, observe los datos de la tabla furniture_data que utilizaremos en los demás ejemplos de este artículo:

id furniture points price
1 chair 5 120
2 sofa 8 950
3 table 2 1350
4 bookcase 5 200
5 bed 3 2000

Así es como queda tras una ordenación ascendente por la columna furniture:

id furniture points
5 bed 3
4 bookcase 5
1 chair 5
2 sofa 8
3 table 2

¿Y si hacemos una ordenación descendente por la misma columna?

SELECT id, furniture, points
FROM furniture _data
ORDER BY furniture DESC ;

Aquí está el resultado para la ordenación descendente:

id furniture points
3 table 2
2 sofa 8
1 chair 5
4 bookcase 5
5 bed 3

Usando ORDER BY con múltiples columnas

Los últimos ejemplos han ordenado los datos utilizando sólo una columna. Sin embargo, si algunos registros de esta columna tienen valores idénticos, podría afectar a la forma en que se muestran los resultados. En este caso, necesitamos ordenar las filas utilizando una columna adicional. El siguiente ejemplo muestra cómo utilizar más de una columna para ordenar los datos:

SELECT id, furniture, points
FROM furniture _data
ORDER BY point DESC , furniture;

Este ejemplo ordena las filas en orden descendente según la columna points. Si dos o más registros tienen el mismo valor, la base de datos utiliza la columna furniture para ordenar estos registros en orden ascendente.

Estos son los resultados:

id furniture points
2 sofa 8
4 bookcase 5
1 chair 5
5 bed 3
3 table 2

Las filas de librerías y sillas tienen el mismo número de puntos (5), por lo que estas filas también se ordenan por los valores de la columna furniture. La ordenación es alfabética, por lo que la fila estantería fila se muestra antes de la silla fila .

Expresiones en la cláusula ORDER BY

A veces necesitamos ordenar los registros por el resultado de un cálculo en lugar de por los valores de las columnas. Imagínese que desea ordenar los datos recuperados de la tabla furniture_data según el importe de un descuento en el precio. Calcularía el descuento multiplicando el valor de la columna points por 120 y dividiéndolo por 100.

Así es como se vería esto en código SQL:

SELECT id, furniture, points, price
FROM furniture _data
ORDER BY price-120*points/100;

Este es el resultado:

id furniture points price
1 chair 5 120
4 bookcase 5 200
2 sofa 8 950
3 table 2 1350
5 bed 3 2000

Usando ORDER BY con CASE

Ordenando por la Expresión CASE

Además de ordenar filas utilizando una o más columnas, también puede utilizar ORDER BY con expresiones CASE simples y buscadas. (Para aprender más sobre CASE, lea este artículo.) ¿Por qué usar CASE en una cláusula ORDER BY? Es posible que quiera ser más específico en la forma de ordenar las filas, o que quiera recuperar sólo algunas de las filas (es decir, las que cumplen ciertas condiciones).

El siguiente ejemplo muestra cómo utilizar CASE para ordenar los datos de una manera específica. Imagínese que quiere recuperar los datos de la tabla furniture_data pero que quiere que las filas con un número par de puntos aparezcan en la parte superior de los resultados. No puedes hacer esto usando columnas como criterio de ordenación; necesitas CASE.

A continuación se muestra un ejemplo del código correspondiente:

SELECT id, furniture, points
FROM furniture _data
ORDER BY CASE 
              WHEN points%2=0  THEN 1
              ELSE 2
         END ;

Este es el aspecto de los resultados:

id furniture points
2 sofa 8
3 table 2
1 chair 5
4 bookcase 5
5 bed 3

¿Cómo hizo esto la expresión CASE? Comprobó si el número de la columna points podía dividirse por 2 sin que quedara un resto. Si podía, se devolvía un 1 y la fila se muestra en la parte superior de los resultados. En caso contrario, se devuelve un 2 y la fila se muestra en la parte inferior de los resultados.

Si quieres que los registros de muebles con un número impar de puntos aparezcan primero, lo único que tienes que hacer es cambiar el orden de clasificación a descendente:

SELECT id, furniture, points
FROM furniture _data
ORDER BY CASE 
              WHEN points%2=0  THEN 1
              ELSE 2
         END   DESC ;

El resultado:

id furniture points
1 chair 5
4 bookcase 5
5 bed 3
2 sofa 8
3 table 2

Ordenación con CASE y una columna

Puede utilizar otras cosas junto con una sentencia CASE, como una columna o incluso otra expresión CASE. Observe el siguiente ejemplo, que utiliza una expresión CASE y una columna para ordenar los datos.

SELECT id, furniture, points
FROM furniture _data
ORDER BY CASE 
              WHEN points%2=0  THEN 1
              ELSE 2
         END , furniture  DESC ;

En primer lugar, los registros se ordenan según la expresión CASE, que comprueba si los valores de points son pares o impares. Como antes, los números pares aparecen primero. Pero queremos ordenar aún más los grupos. Así que utilizamos la columna furniture para ordenar los resultados dentro de CASE. Como hemos utilizado la palabra clave DESC, las filas aparecen en orden alfabético inverso. Aquí están los resultados:

id furniture points
3 table 2
2 sofa 8
1 chair 5
4 bookcase 5
5 bed 3

Compare estos resultados con los de abajo, que sólo utilizan la expresión CASE:

id furniture points
2 sofa 8
3 table 2
1 chair 5
4 bookcase 5
5 bed 3

¿Quiere saber más?

Este artículo sólo le ha servido para empezar a utilizar la cláusula ORDER BY. La mejor manera de aprender más es probarla por ti mismo, usando el curso de Consultas SQL de la Academia Vertabelo.