SELECT g.gam_id, g.gam_titulo, r.rnk_pontos, r.rnk_nome
FROM games g, ranking r
WHERE r.gam_id = g.gam_id
group by g.gam_id
HAVING r.rnk_pontos >= MAX(r.rnk_pontos)
Pessoal, teoricamente este select deveria estar funcionando, mas acontece que ele não retorna todos os registros necessários.
SELECT g.gam_id,
g.gam_titulo,
r.rnk_pontos,
r.rnk_nome
FROM games g, ranking r
WHERE r.gam_id = g.gam_id
group by g.gam_id,
g.gam_titulo,
r.rnk_pontos,
r.rnk_nome
HAVING r.rnk_pontos >= MAX(r.rnk_pontos)
Veja se assim você consegue visualizar seu resultado.
R
Renatho
também não
assim ele não retorna só a maior pontuação, assim ele retorna todos, pois agrupa os outros campos também e em cada um o MAX(r.rnk_pontos) fica o próprio r.rnk_pontos
boaglio
Renatho:
SELECT g.gam_id, g.gam_titulo, r.rnk_pontos, r.rnk_nome
FROM games g, ranking r
WHERE r.gam_id = g.gam_id
group by g.gam_id
HAVING r.rnk_pontos >= MAX(r.rnk_pontos)
Pessoal, teoricamente este select deveria estar funcionando, mas acontece que ele não retorna todos os registros necessários.
tenho uma tabela de GAMES
gam_id
gam_titulo
e uma de RANKING
rnk_nome
rnk_pontos
Precisava saber a maior pontuação de cada jogo.
Alguém sabe me dizer o que está acontecendo?
Impossível esse SELECT funcionar, o agrupamento está errado.
Acho que o que vc quer é isso:
SELECT g.gam_id, g.gam_titulo, MAX(r.rnk_pontos)
FROM games g, ranking r
WHERE r.gam_id = g.gam_id
group by g.gam_id, g.gam_titulo
R
Renatho
Quase isso, eu preciso também o nome do cara que fez a pontuação “r.rnk_nome”, se eu colocar ai ele retorna o nome de outro cara, por isso que ao inves de usar o MAX(r.rnk_pontos) no select usei o r.rnk_pontos
boaglio
Ah, ok, então o q vc precisa é isso:
SELECT g.gam_id, g.gam_titulo, r.rnk_nome ,r.rnk_pontos
FROM games g, ranking r
WHERE r.gam_id = g.gam_id
AND r.rnk_pontos IN (select MAX(r.rnk_pontos)
FROM ranking r2
WHERE r2.gam_id = g.gam_id )
Roger75
No caso você poderia ter duas pessoas com a mesma pontuação para o mesmo jogo, por isso o nome não está sendo retornado.
Faça um select com subselect:
select sub1.tit1, sub1.pont1, sub2.nome from
(select g.gam_titulo tit1, max(r.pontos) pont1
from games g, ranking r
where g.gam_id=r.gam_id
group by g.gam_id) sub1,
ranking sub2
where sub1.pont1=sub2.pontos
order by sub1.tit1,sub1.pont1;
R
Renatho
esta forma não funciona no mysql
Roger75
Qual sua versão do MySQL? No MySQL 5 funciona.
R
Renatho
o servidor q vou precisar usar esse select tem a versão 4 =\
boaglio
Desde a versão 4 do MySQL que existe o suporte a subqueries, veja esse exemplo.