Introdução à cláusula SELECT DISTINCT
no PostgreSQL
A cláusula DISTINCT
é usada na instrução SELECT
para remover linhas duplicadas de um conjunto de resultados. A cláusula DISTINCT
mantém uma linha para cada grupo de linhas duplicadas. A cláusula DISTINCT
pode ser aplicada a uma ou mais colunas na lista de seleção da instrução SELECT
.
O seguinte ilustra a sintaxe da cláusula DISTINCT
:
SELECT
DISTINCT column1
FROM
table_name;
Nesta declaração, os valores da coluna column1
são usados para avaliar a duplicata.
Se você especificar várias colunas, a cláusula DISTINCT
avaliará a duplicata com base na combinação de valores dessas colunas.
SELECT
DISTINCT column1, column2
FROM
table_name;
Neste caso, a combinação de valores em ambas colunas column1
e column2
será usada para avaliar a duplicata.
O PostgreSQL também fornece o DISTINCT ON (expression)
para manter a “primeira” linha de cada grupo de duplicatas usando a seguinte sintaxe:
SELECT
DISTINCT ON (column1) column_alias,
column2
FROM
table_name
ORDER BY
column1,
column2;
A ordem das linhas retornadas da instrução SELECT
não é especificada, portanto, a “primeira” linha de cada grupo da duplicata também não é especificada.
É uma boa prática sempre usar a cláusula ORDER BY
com o DISTINCT ON(expression)
para tornar o conjunto de resultados previsível.
Observe que a expressão DISTINCT ON
deve corresponder à expressão mais à esquerda na cláusula ORDER BY
.
Exemplos de SELECT DISTINCT
no PostgreSQL
Vamos criar uma nova tabela chamada distinct_demo
e inserir dados nela para praticar a cláusula DISTINCT
.
Observe que você aprenderá como criar uma tabela e inserir dados em uma tabela no tutorial subsequente. Neste tutorial, você apenas executa a instrução no psql ou pgAdmin para executar as instruções.
Primeiro, use a seguinte instrução CREATE TABLE
para criar a tabela distinct_demo
que consiste em três colunas: id
, bcolor
e fcolor
.
CREATE TABLE distinct_demo (
id serial NOT NULL PRIMARY KEY,
bcolor VARCHAR,
fcolor VARCHAR
);
Em segundo lugar, insira algumas linhas na tabela distinct_demo
usando a seguinte instrução INSERT
:
INSERT INTO distinct_demo (bcolor, fcolor)
VALUES
('red', 'red'),
('red', 'red'),
('red', NULL),
(NULL, 'red'),
('red', 'green'),
('red', 'blue'),
('green', 'red'),
('green', 'blue'),
('green', 'green'),
('blue', 'red'),
('blue', 'green'),
('blue', 'blue');
Terceiro, consulte os dados da tabela distinct_demo
usando a instrução SELECT
:
SELECT
id,
bcolor,
fcolor
FROM
distinct_demo ;

Exemplo de DISTINCT
em uma coluna do PostgreSQL
A instrução a seguir seleciona valores exclusivos na coluna bcolor
da tabela t1
e classifica o conjunto de resultados em ordem alfabética usando a cláusula ORDER BY
.
SELECT
DISTINCT bcolor
FROM
distinct_demo
ORDER BY
bcolor;


PostgreSQL DISTINCT
em múltiplas colunas
A instrução a seguir demonstra como usar a cláusula DISTINCT
em várias colunas:
SELECT
DISTINCT bcolor,
fcolor
FROM
distinct_demo
ORDER BY
bcolor,
fcolor;

Como especificamos as colunas bcolor
e fcolor
na cláusula SELECT DISTINCT
, o PostgreSQL combinou os valores em ambas bcolor
e fcolor
colunas para avaliar a exclusividade das linhas.
A consulta retorna a combinação única de bcolor
e fcolor
da tabela distinct_demo
. Observe que a tabela distinct_demo
possui duas linhas com valor red
nas colunas bcolor
e fcolor
. Quando aplicamos o DISTINCT
a ambas as colunas, uma linha foi removida do conjunto de resultados porque é a duplicata.
Exemplo de PostgreSQL DISTINCT ON
A instrução a seguir classifica o conjunto de resultados por bcolor
e fcolor
e, para cada grupo de duplicatas, mantém a primeira linha no conjunto de resultados retornado.
SELECT
DISTINCT ON (bcolor) bcolor,
fcolor
FROM
distinct_demo
ORDER BY
bcolor,
fcolor;
Aqui está o resultado:

Neste tutorial, você aprendeu como usar a instrução SELECT DISTINCT
para remover linhas duplicadas retornadas por uma consulta.