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
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. 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