Resumen: en este tutorial, aprenderá a utilizar la cláusula PostgreSQL SELECT DISTINCT
para eliminar filas duplicadas de un conjunto de resultados devueltos por una consulta.
Introducción a la cláusula SELECT DISTINCT de PostgreSQL
La cláusula DISTINCT
se utiliza en la sentencia SELECT
para eliminar filas duplicadas de un conjunto de resultados. La cláusula DISTINCT
mantiene una fila por cada grupo de duplicados. La cláusula DISTINCT
puede aplicarse a una o varias columnas de la lista de selección de la sentencia SELECT
.
Lo siguiente ilustra la sintaxis de la cláusula DISTINCT
:
Code language: SQL (Structured Query Language) (sql)SELECT DISTINCT column1FROM table_name;
En esta sentencia, los valores de la columna column1
se utilizan para evaluar el duplicado.
Si especifica varias columnas, la cláusula DISTINCT
evaluará el duplicado basándose en la combinación de valores de estas columnas.
Code language: SQL (Structured Query Language) (sql)SELECT DISTINCT column1, column2FROM table_name;
En este caso, la combinación de valores de ambas columnas column1
y column2
se utilizará para evaluar el duplicado.
PostgreSQL también proporciona el DISTINCT ON (expression)
para mantener la «primera» fila de cada grupo de duplicados utilizando la siguiente sintaxis:
El orden de las filas devueltas desde la sentencia SELECT
no está especificado por lo tanto la «primera» fila de cada grupo del duplicado tampoco está especificada.
Es una buena práctica utilizar siempre la cláusula ORDER BY
con la sentencia DISTINCT ON(expression)
para que el conjunto de resultados sea predecible.
Nota que la expresión DISTINCT ON
debe coincidir con la expresión más a la izquierda de la cláusula ORDER BY
.
Ejemplos de SELECT DISTINCT en PostgreSQL
Creemos una nueva tabla llamada distinct_demo
e insertamos datos en ella para practicar la cláusula DISTINCT
.
Nota que aprenderás a crear una tabla y a insertar datos en una tabla en el siguiente tutorial. En este tutorial, simplemente ejecuta la sentencia en psql o pgAdmin para ejecutar las sentencias.
Primero, utiliza la siguiente sentencia CREATE TABLE
para crear la tabla distinct_demo
que consta de tres columnas: id
bcolor
y fcolor
.
Code language: SQL (Structured Query Language) (sql)CREATE TABLE distinct_demo (id serial NOT NULL PRIMARY KEY,bcolor VARCHAR,fcolor VARCHAR);
En segundo lugar, inserta algunas filas en la tabla distinct_demo
utilizando la siguiente sentencia INSERT
:
En tercer lugar, consulta los datos de la tabla distinct_demo
utilizando la sentencia SELECT
:
Code language: SQL (Structured Query Language) (sql)SELECTid,bcolor,fcolorFROMdistinct_demo ;
Ejemplo de PostgreSQL DISTINCT one column
La siguiente sentencia selecciona valores únicos en la columna bcolor
de la tabla t1
y ordena el conjunto de resultados en orden alfabético utilizando la cláusula ORDER BY
.
Code language: SQL (Structured Query Language) (sql)SELECTDISTINCT bcolorFROMdistinct_demoORDER BYbcolor;
PostgreSQL DISTINCT múltiples columnas
La siguiente sentencia demuestra cómo utilizar la cláusula DISTINCT
en múltiples columnas:
Code language: SQL (Structured Query Language) (sql)SELECTDISTINCT bcolor,fcolorFROMdistinct_demoORDER BYbcolor,fcolor;
Porque especificamos ambas columnas bcolor
y fcolor
en la cláusula SELECT DISTINCT
, PostgreSQL combinó los valores de ambas columnas bcolor
y fcolor
para evaluar la unicidad de las filas.
La consulta devuelve la combinación única de bcolor
y fcolor
de la tabla distinct_demo
. Observa que la tabla distinct_demo
tiene dos filas con red
valor en ambas columnas bcolor
y fcolor
. Cuando aplicamos el DISTINCT
a ambas columnas, se eliminó una fila del conjunto de resultados porque es el duplicado.
Ejemplo de PostgreSQL DISTINCT ON
La siguiente sentencia ordena el conjunto de resultados por el bcolor
y fcolor
, y luego para cada grupo de duplicados, mantiene la primera fila en el conjunto de resultados devuelto.
Code language: SQL (Structured Query Language) (sql)SELECTDISTINCT ON (bcolor) bcolor,fcolorFROMdistinct_demo ORDER BYbcolor,fcolor;
Aquí está la salida:
En este tutorial, has aprendido a utilizar la sentencia PostgreSQL SELECT DISTINCT
para eliminar las filas duplicadas devueltas por una consulta.
- ¿Ha sido útil este tutorial?
- SíNo