Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Renato =)

Contar semelhantes

Recommended Posts

Como conto semelhantes numa tabela de sql?

 

Por exemplo, quero saber em uma tabela, o valor do campo "ESPÉCIE" que mais tem valores iguais para aparecer assim "A espécie mais frequente é: *resultado*"

 

Por exemplo, em uma tabela

 

ID | NOME | ESPÉCIE
01 | Deus  | 1
02 | Zeus  | 1
03 | Seus  | 2

no caso, *resultado* seria 1, por que aparece 2 vezes

 

Como faço isso??

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom... se tiver uma base da quantidade de ocorrências, você pode utilizar o Group By com o Having, agrupando pela espécie e retornando somente o que teve X ou mais ocorrências, ex:

SELECT *

FROM teste4

GROUP BY especie

HAVING COUNT(*) >= 2

iria exibir uma relação com as espécies que possuem duas ou mais ocorrências, só que desta forma não iria exibir todos os registros daquela espécie, por exemplo, iria exibir somente o Deus. já que está agrupando justamente pela espécie de acordo com a definição no Having.

 

se quiser ter uma relação completa daquelas espécies que tem as ocorrências seria algo do tipo:

Select teste4.*

FROM

(

SELECT especie

FROM teste4

GROUP BY especie

HAVING COUNT(*) >= 2

)

as ocorrencias

INNER JOIN teste4 ON teste4.especie = ocorrencias.especie

ali na subquery destacado em verde vai retornar as espécies que possui duas ou mais ocorrências (mas sempre 1 registro de cada espécie).

já na parte em azul está fazendo uma consulta na tabela para exibir todos os registros daquelas espécies que foram encontradas na subquery.

 

só que tudo isto está definindo um mínimo de ocorrências que neste caso são duas.

 

ps: acredito não ser a única a opção, se não ajudar vamos ver se mais alguém dá outra idéia. :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi aquele HAVING COUNT(*)<=2

 

A idéia na verdade é a seguinte:

tem um campo de busca no site, e quero ver qual a seção mais procurada...

 

Quando a busca é feita, é adicionado um campo numa tabela chamada "estatisticas_busca" com a seção dessa busca...

 

quero que de alguma forma o mysql retorne o nome da seção mais procurada entre todas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

o lance do Having é uma condição que é aplicada no Group By. neste caso seriam retornados os registros agrupados pela espécie desde que o total de registros (no grupo) seja maior ou igual a 2.

lembrando que no Having você pode incluir mais 'critérios'.

aqui nesta documentação fala um pouco sobre o uso http://dev.mysql.com/doc/refman/5.0/en/select.html.

 

mas pelo visto não é o seu caso.

 

você quer a busca (seção) que é feita com mais freqüência dentre todas, seria até mais simples. você pode fazer a contagem agrupando pelo termo e ordenar decrescentemente e limitando a consulta para retornar apenas um registro, para pegar justamente o maior.

 

seria algo assim:

select especie, count(*) as quantidade

from teste4

group by especie

order by quantidade desc

limit 1

retornaria um registro apenas, sendo que é o que possui mais ocorrências na tabela.

 

pode ser feito desta forma também:

select especie

from teste4

group by especie

order by count(*) desc

limit 1

ou ainda não é isto? ehehe http://forum.imasters.com.br/public/style_emoticons/default/yay.gif

 

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.