Lidar com valores duplicados em SQL pode ser uma tarefa complicada. Mas não tema, este guia está aqui para aliviar seu fardo.
Os dados vêm em todas as formas e formas, mas os registros duplicados são uma parte importante de todos os formatos de dados. Seja lidando com dados baseados na web ou simplesmente navegando por um caminhão cheio de dados de vendas, sua análise ficará distorcida se você tiver valores duplicados.
Você usa SQL para analisar seus números e realizar consultas longas em suas pilhas de dados? Se sim, então este guia sobre gerenciamento de duplicatas SQL será um deleite absoluto para você.
Aqui estão algumas maneiras diferentes que você pode usar para gerenciar duplicatas usando SQL.
1. Contando Duplicatas Usando Grupo por Função
SQL é uma linguagem de programação multifacetada que oferece várias funções para simplificar os cálculos. Se você tiver muita experiência com as funções de agregação em SQL, talvez já esteja familiarizado com o agrupar por função e para que pode ser usado.
O agrupar por função é uma das comandos SQL mais básicos, o que é ideal para lidar com vários registros, pois você pode usar diferentes funções de agregação como soma, contar, média, e muitos outros em conjunto com o agrupar por função para chegar a um valor distinto em linha.
Dependendo do cenário, você pode encontrar duplicatas com o agrupar por função dentro de uma única coluna e várias colunas.
a. Contar duplicatas em uma única coluna
Suponha que você tenha a seguinte tabela de dados com duas colunas: ID do produto e Pedidos.
ID do produto |
Pedidos |
2 |
7 |
2 |
8 |
2 |
10 |
9 |
6 |
10 |
1 |
10 |
5 |
12 |
5 |
12 |
12 |
12 |
7 |
14 |
1 |
14 |
1 |
47 |
4 |
47 |
4 |
Para encontrar IDs de produtos duplicados, você pode usar o agrupar por função e o tendo cláusula para filtrar os valores agregados, conforme a seguir:
selecionar ID do produto, contar(ID do produto) como Conta_total
de sahil.product_dups
agrupar por productid
tendo contagem (productid) > 1
ordem por productid;
Assim como em uma instrução SQL típica, você deve começar definindo as colunas que deseja exibir no resultado final. Neste caso, queremos exibir o número de valores duplicados dentro do ID do produto coluna.
No primeiro segmento, defina o ID do produto coluna dentro do selecionar declaração. O contar função segue o ID do produto referência para que o SQL entenda o propósito de sua consulta.
Em seguida, defina a tabela de origem usando o de cláusula. Desde contar é uma função de agregação, você precisa usar o agrupar por para agrupar todos os valores semelhantes.
Lembre-se, a ideia é listar os valores duplicados dentro do ID do produto coluna. Para isso, você deve filtrar a contagem e exibir os valores que ocorrem mais de uma vez na coluna. O tendo a cláusula filtra os dados agregados; você pode usar a condição, ou seja, contagem (productid) > 1, para exibir os resultados desejados.
finalmente, o ordenar por A cláusula classifica os resultados finais em ordem crescente.
A saída é a seguinte:
b. Contar duplicatas em várias colunas
Quando você deseja contar duplicatas em várias colunas, mas não deseja escrever várias consultas SQL, pode expandir o código acima com alguns ajustes. Por exemplo, se você deseja exibir linhas duplicadas em várias colunas, pode usar o seguinte código:
selecionar ID do produto, pedidos, contar(*) como Conta_total
de sahil.product_dups
agrupar por productid, pedidos
tendo contagem (productid) > 1
ordem por productid;
Na saída, você notará que apenas duas linhas são exibidas. Quando você ajusta a consulta e adiciona a referência de ambas as colunas dentro do selecionar instrução, você obtém uma contagem de linhas correspondentes com valores duplicados.
Ao invés de contagem (coluna) função, você deve passar o contar(*) função para obter linhas duplicadas. O * A função alterna entre todas as linhas e procura linhas duplicadas em vez de valores duplicados individuais.
A saída é mostrada abaixo:
As linhas correspondentes com ID do produto 14 e 47 são exibidas, pois os valores do pedido são os mesmos.
2. Sinalização de duplicatas com a função row_number ()
Enquanto o agrupar por e tendo combinação é a maneira mais simples de encontrar e sinalizar duplicatas em uma tabela, existe uma maneira alternativa de encontrar duplicatas usando o número_linha() função. O número_linha() função faz parte do Funções da janela SQL categoria e é essencial para o processamento eficiente de suas consultas.
Veja como você pode sinalizar duplicatas usando o número_linha() função:
selecionar ID do produto, pedidos,
row_number() over (partição por productid order por productid) como sno
de sahil.product_dups;
O número_linha() A função vasculha cada valor de ID do produto e assimila o número de recorrências para cada ID. O partição A palavra-chave segrega os valores duplicados e atribui valores cronologicamente, como 1, 2,3 e assim por diante.
Se você não usar o partição palavra-chave, você terá um número de série exclusivo para todos os IDs de produto, o que não é adequado para sua finalidade.
O ordenar por A cláusula dentro da seção de partição é funcional ao definir a ordem de classificação. Você pode escolher entre ordem crescente (padrão) e decrescente.
Por fim, você pode atribuir um alias à coluna para facilitar a filtragem posterior (se necessário).
3. Excluindo linhas duplicadas de uma tabela SQL
Como valores duplicados em uma tabela podem distorcer sua análise, eliminá-los durante o estágio de limpeza de dados geralmente é imperativo. O SQL é uma linguagem valiosa que oferece maneiras de rastrear e excluir seus valores duplicados com eficiência.
a. Usando a palavra-chave distinta
O distinto A palavra-chave é provavelmente a função SQL mais comum e usada com frequência para remover valores duplicados em uma tabela. Você pode remover duplicatas de uma única coluna ou até duplicar linhas de uma só vez.
Veja como você pode remover duplicatas de uma única coluna:
selecionardistinto ID do produto de sahil.product_dups;
A saída retorna uma lista de todos os IDs de produtos exclusivos da tabela.
Para remover linhas duplicadas, você pode ajustar o código acima da seguinte maneira:
selecionardistinto * de sahil.product_dups;
A saída retorna uma lista de todas as linhas exclusivas da tabela. Observando a saída, você notará que os IDs de produto 14 e 47 aparecem apenas uma vez na tabela de resultados final.
b. Usando o método de expressão de tabela comum (CTE)
O método Common Table Expression (CTE) difere ligeiramente do código SQL principal. CTEs são semelhantes a Tabelas temporárias do SQL, com a única diferença de que são virtuais, que podem ser referenciados apenas durante a execução da consulta.
O maior benefício é que você não precisa passar uma consulta separada para descartar essas tabelas posteriormente, pois elas deixam de existir assim que a consulta é executada. Usando o método CTE, você pode usar o código abaixo para localizar e excluir duplicatas.
com cteprodutos como
(selecionar ID do produto, pedidos,
row_number() over (partição por productid order por productid) como sno
de sahil.product_dups)
selecionar * de cteprodutos
onde sno = 1;
Você pode invocar a função CTE usando o com palavra-chave; definir o nome da tabela virtual temporária após o com palavra-chave. A referência da tabela CTE é útil ao filtrar os valores da tabela.
Na próxima parte, atribua números de linha aos seus IDs de produto usando o número_linha() função. Como você está referenciando cada ID de produto com um partição função, cada ID recorrente tem um valor distinto.
Finalmente, filtre o recém-criado roncando coluna no último segmento com outra selecionar declaração. Defina esse filtro como 1 para obter valores exclusivos na saída final.
Aprenda a usar o SQL de maneira fácil
SQL e suas variantes tornaram-se o assunto da cidade, com sua capacidade inata de consultar e usar bancos de dados relacionais. Desde escrever consultas simples até realizar análises elaboradas com subconsultas, essa linguagem tem de tudo um pouco.
No entanto, antes de escrever qualquer consulta, você deve aprimorar suas habilidades e decifrar os códigos para se tornar um programador adepto. Você pode aprender SQL de forma divertida implementando seu conhecimento em jogos. Aprenda algumas nuances de codificação sofisticadas adicionando um pouco de diversão ao seu código.