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.
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
Olá! Sou Fabio, criador do blog FabioBmed, um espaço onde compartilho minha paixão por marketing digital, tecnologia, empreendedorismo e, claro, os aprendizados do meu dia a dia. Aqui você encontrará um mix de conteúdos profissionais e pessoais, sempre com insights práticos, dicas úteis e histórias reais.
Com mais de 15 anos de experiência no mercado digital e fundador da FBDigital, minha missão é inspirar e ajudar pessoas e empresas a construírem uma base sólida no universo online. Seja por meio de estratégias de marketing, ferramentas tecnológicas ou reflexões sobre o cotidiano, meu objetivo é transformar desafios em oportunidades.
Além dos conteúdos voltados para negócios e tecnologia, também compartilho momentos do meu dia a dia, ideias que aprendo pelo caminho e até curiosidades que podem fazer a diferença na sua vida. Aqui, cada post reflete minha busca por conhecimento e minha vontade de conectar pessoas e histórias.
Conecte-se comigo e acompanhe tudo sobre marketing, tendências digitais, aprendizados pessoais e muito mais. Juntos, vamos explorar o melhor do mundo digital e da vida cotidiana!
- Site: www.fabiobmed.com.br
- WhatsApp: WhatsApp
- E-mail:
Publicação Criada em: novembro 11, 2013
Sem atualizações registradas.
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.