logo del blog

Devproplus

Cláusula ORDER BY en PostgreSQL

4 min de lectura

En muchas ocasiones necesitamos obtener los datos devueltos de nuestras consultas con un orden específico, para lograr esto, en PostgreSQL tenemos la cláusula ORDER BY. Esta cláusula logra devolver los resultados ordenados en función de los valores de una o más columnas de la tabla e incluso permite evaluar expresiones para ordenar los datos en función del resultado obtenido en la expresión.

Aparte de las columnas y expresiones que le podemos indicar a ORDER BY para que ordene los resultados, hay una serie de palabras claves que podemos indicar opcionalmente a continuación de cada expresión para ajustar mucho más los resultados de la consulta a nuestra necesidad. Estas palabras son ASC y DESC de ascendente y descendente, para que muestre los resultados en el orden correspondiente. También tenemos NULL seguido de FIRST o LAST de primero o último, para que muestre los resultados NULL primeros o últimos, en caso de que existan.

Sintaxis:

SELECT select_list
    FROM table_expression
    ORDER BY sort_expression1 [ASC | DESC] [NULLS { FIRST | LAST }]
            [, sort_expression2 [ASC | DESC] [NULLS { FIRST | LAST }] ...] 
            

Parámetros:

sort_expression1: Es la expresión o columna por la que se quiere ordenar.

[ASC | DESC]: Palabras claves para que los datos se muestren en orden ascendente o descendente según la palabra clave que usemos, son opcionales por eso están entre corchetes. Por defecto lo va a ordenar de forma ascendente.

[NULLS { FIRST | LAST }]: Palabras claves que indican, que en el caso que existan valores NULL en los datos por los que queremos ordenar, aparezcan de últimos o primeros. Es opcional.

sort_expression2: Quiere decir que ORDER BY soporta más de una expresión o columna para ordenar. Esto implica que si existe más de una expresión o columna, va a ordenar por la primera expresión y en caso de que existan datos iguales, va a tomar en cuenta la segunda expresión para saber cual dato mostrar antes o después en el orden.

Para la demostración usaré una tabla que se llama 'student' con 4 registros. En cada imagen se verá la tabla con el orden por defecto, abajo la consulta utilizada y abajo de la consulta la salida de los datos según la consulta.

ORDER BY simple.

En la primera captura se puede ver el uso de ORDER BY solamente en una columna y sin parámetros y en la segunda se añade DESC para ordenar de forma descendente.

SELECT * FROM student ORDER BY age;

Como se puede observar la columna que se está tomando para aplicar el orden es 'age'.

ORDER BY utilizando una sola columna para ordenar
SELECT * FROM student ORDER BY age DESC;
ORDER BY utilizando una sola columna para ordenar descendentemente

ORDER BY con expresiones.

En el siguiente ejemplo se puede ver el uso de ORDER BY con expresiones. En este caso en concreto es la suma de los valores dos columnas, el resultado de la suma es lo que se toma en cuenta para ordenar. También se puede usar ASC, DESC, NULL FIRST o NULL LAST para personalizar aún más la devolución de los datos.

SELECT * FROM student ORDER BY exam_one + exam_two;
Order by con expresiones

Uso de ORDER BY con dos expresiones.

En las dos siguientes capturas se puede observar el funcionamiento de ORDER BY con dos expresiones o condiciones. Utilizando ORDER BY de la siguiente manera, lo que hace es ordenar por la primera condición, si entre los valores que toma para ordenar encuentra que son iguales, toma la segunda condición para decidir en que orden mostrar los resultados. Obserben que en el ejemplo toma la columna 'subject' para ordenar, en este caso como los valores de dicha columna son iguales, toma la segunda condición en este caso 'age' para decidir el orden.

SELECT * FROM student ORDER BY subject, age;
uso de ORDER BY con dos expresiones

En el siguiente ejemplo del uso de ORDER BY con dos expresiones, le agregamos el uso de NULL. En la captura se puede observar dos consultas, la primera sin el uso de NULL y en la segunda utilizando NULL para que vean la diferencia.

SELECT * FROM student ORDER BY subject, last_name NULL FIRST;
uso de ORDER BY con dos expresiones y null

Utilizando ORDER BY con un alias o etiqueta.

Como se puede observar en el siguiente ejemplo, a ORDER BY se le puede perdir que ordene por el alias de una expresión o columna. En el ejemplo, se realiza un operación aritmética y se le da el alias de 'sum' y se le pide a ORDER BY que ordene por el alias. Se agregó a la salida la columna 'name' para un mejor entendimiento del ejemplo.

SELECT exam_one + exam_two AS sum FROM student ORDER BY sum;
uso de ORDER BY con alias

Conclusión

Es importante destacar que ORDER BY se puede aplicar al resultado de una combinación UNION, INTERSECT o EXCEPT, pero en este caso solo se permite ordenar por nombres o números de columna de salida, no por expresiones.

Como pudimos ver la cláusula ORDER BY en PostgreSQL es una herramienta valiosa para organizar los resultados de una consulta en el orden deseado. Nos permite ordenar los datos de manera ascendente o descendente según los valores de una o más columnas, así como evaluar expresiones para determinar el orden de los resultados. También ofrece opciones para controlar cómo se manejan los valores nulos en los datos ordenados.