Query vencedora! Alguém pode me ajudar?

3 respostas
L

Oi Pessoal,
Estou querendo uma query simples mas como não tenho mt experiência não sei como fazer!

Digamos que eu tenha a seguinte tabela de log, de acordo com as visitas dos usuarios as páginas no site:

Log +-----------+-------------+------------+-----------+ | Login | Data | Estilo | Acao | +-----------+-------------+------------+-----------+ | leo182 | 20060721 | Punk-Rock | ouvir | | pedro44 | 20060722 | Pop-Rock | visitar | | joao_op | 20060722 | Hardcore | visitar | | pedro44 | 20060722 | Pop-Rock | ouvir | | pedro44 | 20060722 | Pop-Rock | comprar | | leo182 | 20060721 | Punk-Rock | ouvir | | pedro44 | 20060801 | DeathMetal | ouvir | | pedro44 | 20060801 | Pop-Rock | ouvir | | pedro44 | 20060801 | Reggae | visitar | +-----------+-------------+------------+-----------+
Notamos que o Estilo favorito do usuário “pedro44” é o “pop-rock”.
O que eu gostaria é de uma query que retonasse essatamente isso!
A partir do Login do usuário quero descobrir o Estilo que ele mais interage no site, e com isso eu possa futuramente recomendar a ele outras músicas do mesmo estilo!
Bem, imagino que deve ser algo usando count(*), mas não tenho ideia!
Alguém saberia me dizer? :???:

3 Respostas

M

se voce usa oracle:

select estilo, count(estilo)
from log
where login = "Pedro44"
and rownum = 1
group by estilo
order by count(estilo) desc

se voce usa outro BD que não tenha a pseudo coluna ROWNUM:

select estilo, count(estilo)
from log
where login = "Pedro44"
group by estilo
order by count(estilo) desc

ai pega so o primeiro registro

H

select estilo, count(estilo)
from log
where login = "Pedro44"
group by estilo
having count(estilo) >= all (select count(estilo)
from log
where login = "Pedro44"
group by estilo
)

Assim vc só pega um registro. O maior de todos. Funciona em qualquer BD que vc use!

Boa sorte !

L

Valeu pela ajuda pessoal!!! Deu certo!!!
:grin:
Bem, agora só preciso de mais uma coisa, mas acho que isso não consigo com um simples SELECT.
Já descobri que o pedro prefere “Pop-Rock” certo?
Agora eu queria recomendar a ele outras bandas que são do mesmo estilo, menos a banda favorita dele que vamos supor que seja “Tihuana”.
Então tomando por base a tabela abaixo, sei que eu poderia fazer uma Query assim:

SELECT * FROM bandas WHERE estilo = ‘Pop-Rock’ AND nomebanda != ‘Tihuana’

bandas +-----------------+--------------+ | nomebanda | estilo | +-----------------+--------------+ | Dead Fish | Hardcore | | CPM 22 | Hardcore | | Raimundos | Hardcore | | Detonautas | Pop-Rock | | Pitty | Pop-Rock | | Tihuana | Pop-Rock | | Charlie Brown | Pop-Rock | | Ultraje a Rigor | Pop-Rock | | O Rappa | Reggae-Rock | | Sepultura | DeathMetal | +-----------------+--------------+
Essa Query retornaria: Detonautas, Pitty, Charlie Brown e Ultraje a Rigor!

Mas dessas que retornaram eu só quero selecionar duas! Sendo de forma randomica… pensei em usar essa função:

Random r = new Random(); int randInt = Math.abs(r.nextInt()) % 5;
E assim gerar um numero que seria o numero da linha que eu pego nessa tabela de resultado…
Mas no futuro terão outras bandas cadastradas e esse sorteio não pode se basear em um numero fixo!
Será que existe um SELECT ou uma maneira mais prática de fazer isso? :sad:

Criado 1 de agosto de 2006
Ultima resposta 1 de ago. de 2006
Respostas 3
Participantes 3