none
Selecionar dados repetidos e obter total de repetições. RRS feed

  • 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:

    URL= http://www.zzz.com.br

    URL= http://www.aaa.com.br

    URL= http://www.yyy.com.br

    URL= http://www.aaa.com.br

    URL= http://www.www.com.br

     

    Resultado do select e da quantia de vezes que repete na tabela:
    URL= http://www.zzz.com.br 1

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

    sexta-feira, 1 de fevereiro de 2008 15:27

Respostas

  •  

    Arthur,

     

    Tente assim:

     

    SELECT URL, COUNT (*)

    FROM SuaTabela

    GROUP BY URL

     

     

    Pode ser que no MySQL seja um pouco diferente. Mas a idéia é essa.

     

    Abraço!!

    sexta-feira, 1 de fevereiro de 2008 15:41
  • 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 = true

    Set Rs = Rs_cmd.Execute
    Rs_numRows = 0

     

    E 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,

     

     

     

    quarta-feira, 6 de fevereiro de 2008 12:18

Todas as Respostas

  •  

    Arthur,

     

    Tente assim:

     

    SELECT URL, COUNT (*)

    FROM SuaTabela

    GROUP BY URL

     

     

    Pode ser que no MySQL seja um pouco diferente. Mas a idéia é essa.

     

    Abraço!!

    sexta-feira, 1 de fevereiro de 2008 15:41
  • 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.

    sexta-feira, 1 de fevereiro de 2008 15:52
  •  

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

    quarta-feira, 6 de fevereiro de 2008 01:53
  • 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 Snippet

    Select Count(*), Descricao from Produtos

    Group By Descricao

     

     

     

     

    quarta-feira, 6 de fevereiro de 2008 11:02
  • 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 = true

    Set Rs = Rs_cmd.Execute
    Rs_numRows = 0

     

    E 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,

     

     

     

    quarta-feira, 6 de fevereiro de 2008 12:18
  • 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.

     

     

     

    quarta-feira, 6 de fevereiro de 2008 12:21
  •  

    Blz Arthur,

     

    Qualquer coisa estamos por aqui.

     

     

    Abraço!!!

    quarta-feira, 6 de fevereiro de 2008 17:29