Query para contar valores linhas repetidas em uma tabela SQL Server

Abaixo segue uma QUERY que da para ser utilizada para várias situações.

Veja alguns exemplos de uso:

A QUERY abaixo traz um limite máximo de dez resultados agrupados por uma coluna específica, que nesse caso a coluna se chama “ColunaX”.

WITH Registros as
(
SELECT ROW_NUMBER() OVER (Partition by ColunaX order by ColunaX) AS Cont,*
FROM TBL_TESTE
)
SELECT * FROM Registros WHERE Cont <= 10

Explicando a query.

  • WITH Registros as – Cria uma tabela temporária para armazenar os dados
  • ROW_NUMBER() OVER (Partition by ColunaX order by ColunaX) AS Cont – Faz uma contagem em numero sequencial (1,2,3,4…) das ocorrências com valores repetidos em “ColunaX”.
  • SELECT * FROM Registros WHERE Cont <= 10 – Retorna até no máximo dez para cada registro repetido
VEJA TAMBÉM:   Oracle 11G SQL Developer Digite o caminho completo para java.exe

A QUERY abaixo exclui valores repetido em uma tabela.

WITH Registros as
(
SELECT ROW_NUMBER() OVER (Partition by ColunaX order by ColunaX) AS Cont,*
FROM TBL_TESTE
)
--DELETE Registros WHERE Cont > 1

Explicando a query

  • WITH Registros as – Cria uma tabela temporária para armazenar os dados
  • ROW_NUMBER() OVER (Partition by ColunaX order by ColunaX) AS Cont – Faz uma contagem em numero sequencial (1,2,3,4…) das ocorrências com valores repetidos em “ColunaX”.
  • DELETE Registros WHERE Cont > 1 – Exclui os valores repetido mantendo somente um Registro

 

 

Retornando apenas os valores máximos ou mínimos.

Pegando como exemplo a tabela conforme imagem abaixo.
tabelaArtistas

A técnica utiliza LEFT JOIN na mesma tabela com critérios de ser o mesmo artista e ter o número de execuções maior do que o registro da tabela original.

VEJA TAMBÉM:   Triggers no SQL Server

Ao final, a consulta retorna apenas os registros que não foram relacionados (valor NULL no LEFT JOIN), que são os
registros sem nenhum outro com número de execuções maior – ou seja, os que a coluna plays é na verdade MAX(plays) daquele artista.

SELECT m1.id_artista, m1.nome, m1.plays
FROM musica m1
LEFT JOIN musica m2
    ON m1.id_artista = m2.id_artista
   AND m1.plays < m2.plays
WHERE m2.id IS NULL 

Essa fica sendo, então, a forma mais eficiente de recuperar o registro com maior valor em determinada coluna, já que não é necessário nenhum tipo de subquery e nem mesmo GORUP BY. E se quiser o menor valor, basta trocar o sinal.

Com informações de Imasters

1 comentário em “Query para contar valores linhas repetidas em uma tabela SQL Server”

  1. olá FabioBmed
    achei muito interessante seu artigo sobre
    Query para contar valores linhas repetidas em uma tabela SQL Server
    aproveito para gerar uma questão que esta me quebrando a cabeça.
    tenho uma tabela apenas, com um id em Char(2) e com 15 números gerados aleatoriamente do 01 ao 25, todos em Char(2), esta tabela contem mais de mil resultados, como eu contaria as linhas com mais de 10 números repetidos? como são 15 números tirados de 25 sempre vai ter repetidos.

Deixe um comentário

Rolar para cima