Saltar a contenido

Cuando consulta datos de una tabla, la declaración SELECT devuelve filas en un orden no especificado. Para ordenar las filas del conjunto de resultados, utilice la cláusula ORDER BY de la declaración SELECT.

La cláusula ORDER BY le permite ordenar las filas devueltas por una cláusula SELECT en orden ascendente o descendente según una expresión de clasificación.

A continuación se ilustra la sintaxis de la cláusula ORDER BY :

SELECT 
  select_list 
FROM 
  table_name 
ORDER BY 
  sort_expression1 [ASC | DESC], 
  sort_expression2 [ASC | DESC],
  ...;

En esta sintaxis:

  • Primero, especifique una expresión de clasificación, que puede ser una columna o una expresión, que desea ordenar después de las palabras clave ORDER BY. Si desea ordenar el conjunto de resultados en función de varias columnas o expresiones, debe colocar una coma ( ,) entre dos columnas o expresiones para separarlas.
  • En segundo lugar, utiliza la opción ASC para ordenar filas en orden ascendente y la opción DESC para ordenar filas en orden descendente. Si omite la opción ASC o DESC, ORDER BY utiliza ASC de forma predeterminada.

PostgreSQL evalúa las cláusulas de la declaración SELECT en el siguiente orden: FROM, SELECTy ORDER BY:

img

Debido al orden de evaluación, si tiene un alias de columna en la cláusula SELECT, puede usarlo en la cláusula ORDER BY.

Tomemos algunos ejemplos del uso de la ORDER BY cláusula PostgreSQL.

ORDER BY ejemplos

Usaremos la tabla customer de la base de datos de muestra para la demostración.

mesa de clientes

Uso de la cláusula ORDER BY de PostgreSQL para ordenar filas por una columna

La siguiente consulta utiliza la cláusula ORDER BY para ordenar a los clientes por sus nombres en orden ascendente:

SELECT 
  first_name, 
  last_name 
FROM 
  customer 
ORDER BY 
  first_name ASC;

Ejemplo de ORDENAR POR una columna de PostgreSQL

Dado que la opción ASC es la predeterminada, puede omitirla en la cláusula ORDER BY como aquí:

SELECT 
  first_name, 
  last_name 
FROM 
  customer 
ORDER BY 
  first_name;

Uso de la cláusula ORDER BY de PostgreSQL para ordenar filas por una columna en orden descendente

La siguiente declaración selecciona el nombre y el apellido de la tabla customer y ordena las filas por valores en la columna de apellido en orden descendente:

SELECT 
  first_name, 
  last_name 
FROM 
  customer 
ORDER BY 
  last_name DESC;

PostgreSQL ORDER BY ejemplo DESC de una columna

Uso de la cláusula ORDER BY de PostgreSQL para ordenar filas por varias columnas

La siguiente declaración selecciona el nombre y el apellido de la tabla de clientes y ordena las filas por el nombre en orden ascendente y el apellido en orden descendente:

SELECT 
  first_name, 
  last_name 
FROM 
  customer 
ORDER BY 
  first_name ASC, 
  last_name DESC;

PostgreSQL ORDEN POR múltiples columnas

En este ejemplo, la cláusula ORDER BY ordena primero las filas por valores en la columna del nombre. Luego ordena las filas ordenadas por valores en la columna de apellido.

Como se puede ver en la salida, dos clientes con el mismo nombre, Kelly, tiene el apellido ordenado en orden descendente.

Uso de la cláusula ORDER BY para ordenar filas por expresiones

La función LENGTH() acepta una cadena y devuelve su longitud.

La siguiente sentencia selecciona los nombres y sus longitudes. Ordena las filas por la longitud de los nombres:

SELECT 
  first_name, 
  LENGTH(first_name) len 
FROM 
  customer 
ORDER BY 
  len DESC;

PostgreSQL ORDEN POR expresiones

Como la cláusula ORDER BY se evalúa después de la cláusula SELECT, el alias de columna len está disponible y se puede utilizar en la cláusula ORDER BY.

Cláusula ORDER BY de PostgreSQL y NULL

En el mundo de las bases de datos, NULL es un marcador que indica que faltan datos o que los datos son desconocidos en el momento del registro.

Cuando ordena filas que contienen NULL, puede especificar el orden de NULL con otros valores no nulos utilizando la opción NULLS FIRST o NULLS LAST de la cláusula ORDER BY:

ORDER BY sort_expresssion [ASC | DESC] [NULLS FIRST | NULLS LAST]Lenguaje del código: CSS (css)

La opción NULLS FIRST coloca NULL antes de otros valores no nulos y la opción NULL LAST coloca NULL después de otros valores no nulos.

Vamos a crear una tabla para la demostración.

-- create a new table
CREATE TABLE sort_demo(num INT);

-- insert some data
INSERT INTO sort_demo(num) 
VALUES 
  (1), 
  (2), 
  (3), 
  (null);

Tenga en cuenta que si aún no está familiarizado con las sentencias CREATE TABLE e INSERT, puede simplemente ejecutarlas desde pgAdmin o psql para crear la tabla sort_demo e insertar datos en ella.

La siguiente consulta devuelve datos de la tabla sort_demo:

SELECT 
  num 
FROM 
  sort_demo 
ORDENAR POR 
  num;

Salida:

 num
------
    1
    2
    3
 null
(4 filas)

En este ejemplo, la cláusula ORDER BY ordena los valores de la columna num de la tabla sort_demo en orden ascendente. Coloca NULL después de otros valores.

Tenga en cuenta que psql muestra null como una cadena vacía por defecto. Para hacer null más claro, puede ejecutar el siguiente comando para cambiar una cadena vacía por otra como null:

\pset null null

Salida:

Null display is "null"

Por tanto, si utiliza la opción ASC, la cláusula ORDER BY utiliza por defecto la opción NULLS LAST. Por lo tanto, la siguiente consulta devuelve el mismo resultado:

SELECT 
  num 
FROM 
  sort_demo 
ORDENAR POR 
  num NULLS LAST;

Salida:

 num
------
    1
    2
    3
 null
(4 rows)

Para anteponer NULL a otros valores no nulos, se utiliza la opción NULLS FIRST:

SELECT 
  num 
FROM 
  sort_demo 
ORDENAR POR 
  num NULLS FIRST;

Salida:

 num
------
 null
    1
    2
    3
(4 rows)

La siguiente sentencia ordena los valores de la columna num de la tabla sort_demo en orden descendente:

SELECT 
  num 
FROM 
  ordenar_demo 
ORDENAR POR 
  num DESC;

Salida:

 num
------
 null
    3
    2
    1
(4 filas)

La salida indica que la cláusula ORDER BY con la opción DESC utiliza los NULLS FIRST por defecto.

Para invertir el orden, puedes utilizar la opción NULLS LAST:

SELECT 
  num 
FROM 
  ordenar_demo 
ORDENAR POR 
  num DESC NULLS LAST;

Salida:

 num
------
    3
    2
    1
 null
(4 rosws)

Resumen

  • Utiliza la cláusula ORDER BY en la sentencia SELECT para ordenar las filas del conjunto de consulta.
  • Utiliza la opción ASC para ordenar las filas en orden ascendente y la opción DESC para ordenar las filas en orden descendente.
  • La ORDER BYcláusula utiliza la ASCopción por defecto.
  • Use las opciones NULLS FIRSTy NULLS LASTpara especificar explícitamente el orden de NULLcon otros valores no nulos.