Usuário com melhor resposta
Selecionar dados repetidos e obter total de repetições.

Pergunta
-
Boas,
O problema é o seguinte:
Peguei um trabalho para desenvolver em ASP e o banco de dados é MySQL (não dá pra mudar, já tentei convencer), até então tudo certo pois a connection string está rolando barbaramente bem.O problema é que preciso (dentro de uma única tabela) obter o resultado de "quantas vezes" foram colocadas as mesmas informações no campo URL e no final obter a quantia de vezes de cada uma para posteriormente eu coletar as 15 mais inseridas na tabela.
A parte que está me dando nós na cabeça é justamente no Select isolar campos iguais sendo que não tenho como saber quais serão os campos cadastrados na URL pois isto é um formulário de votação de sites e é além de tudo infinito na imaginação dos internautas.
Assim fica um exemplo da tabela e do resultado que preciso:
Tabela:Resultado do select e da quantia de vezes que repete na tabela:
URL= http://www.zzz.com.br 1URL= http://www.aaa.com.br 2
URL= http://www.yyy.com.br 1
URL= http://www.www.com.br 1
Com o resultado monto uma tabela temporária e toco o trabalho pra frente, que é gerar um gráfico de resultados e uma premiação aos mais votados.
Com o DISTINCT retorna apenas um resultado de cada um diferente não o total que preciso unitário, SUM... rs.. é campo VarChar e tem até 255 caracteres livres;;;
Observação, é uma única tabela e não tem relacionamento nenhum.
Sugestões ?
Grato.
Respostas
-
-
Boas Alexandre,
Eu realmente estava com problema para entender de onde vinha o resultado do COUNT(*) mas após refletir e estudar um pouco mais sua explanação deixei o código assim e funcionou da forma esperada retornando o número de vezes em que o dado se repete na tabela agrupado por dados iguais:
Set Rs_cmd = Server.CreateObject ("ADODB.Command")
Rs_cmd.ActiveConnection = VOTOS_STRING
Rs_cmd.CommandText = "SELECT URL, COUNT(*) as tmpCount FROM VOTOS.Tabela GROUP BY URL"
Rs_cmd.Prepared = trueSet Rs = Rs_cmd.Execute
Rs_numRows = 0E para minha visualização na página era só chamar em asp :
<%=(Rs.Fields.Item("tmpCount").Value)%>
O que eu não estava fazendo era colocar um alias para o COUNT(*), feito isto ficou fácil.
No final das contas sua resposta era simples e plenamente funcional.
Obrigado pela força,
Todas as Respostas
-
-
Olá Alexandre,
Antes de mais nada obrigado pela sua ajuda.
Fiz uma bobagem aqui e separei campo que não podia, retornou após corrigido a página com 3 URL distintas, já não mais todas da tabela, ou seja, funcionou !
Como resgatar além da URL devida a quantia de inserções que teve cada uma e apresentar tb como um resultado ? Fazendo novo select agora baseado nas informações coletadas ?
Novamente, Grato.
-
Olá Arthur!
Usando o exemplo que passei na outra resposta vai funcionar. Vou tentar explicar, você vai colocar as colunas desejadas no SELECT (ou a coluna) e as mesmas serão colocadas no GROUP BY. Além das colunas, no SELECT será colocado a função que fará a agregação dos dados, no caso um COUNT(*).
Siga o exemplo que tinha lhe mostrado que vai dar tudo certo.
Abraço!!!
-
Arthur,
Para você poder resgatar este valor totalizando a quantidade de repetições utilize a função Count(*) e crie um agrupamento de valores através do comando Group By.
Seguindo os exemplos que foram postados, veja também se este poderá te ajudar:
Code SnippetSelect Count(*), Descricao from Produtos
Group By Descricao
-
Boas Alexandre,
Eu realmente estava com problema para entender de onde vinha o resultado do COUNT(*) mas após refletir e estudar um pouco mais sua explanação deixei o código assim e funcionou da forma esperada retornando o número de vezes em que o dado se repete na tabela agrupado por dados iguais:
Set Rs_cmd = Server.CreateObject ("ADODB.Command")
Rs_cmd.ActiveConnection = VOTOS_STRING
Rs_cmd.CommandText = "SELECT URL, COUNT(*) as tmpCount FROM VOTOS.Tabela GROUP BY URL"
Rs_cmd.Prepared = trueSet Rs = Rs_cmd.Execute
Rs_numRows = 0E para minha visualização na página era só chamar em asp :
<%=(Rs.Fields.Item("tmpCount").Value)%>
O que eu não estava fazendo era colocar um alias para o COUNT(*), feito isto ficou fácil.
No final das contas sua resposta era simples e plenamente funcional.
Obrigado pela força,
-
Bom dia Junior,
Enquanto vc escrevia eu estava respondendo ao Alexandre e comentando que funcionou.
Meu problema como descrito acima era visualizar "de onde" vinham os números do COUNT(*), após declarar um alias para ele ficou transparente para mim como exemplifico acima.
Valeu pela sua ajuda também.
-