Ajuda com consulta para montar um ranking
Estou com esse problema,eu tenho que fazer um ranking com a classificação por pontuação e caso haja empate, por data e hora em que a pontuação foi inserida sendo a pontuação mais recente dada como maior.
select * from (
(SELECT distinct nome_jogador,pontos,datahora, 1 as ordem
from jogador j inner join pontuacao_fx p
on j.id_jogador = p.id_jogador WHERE pontos > (SELECT pontos FROM pontuacao_fx WHERE id_jogador=7 )
ORDER BY datahora desc, pontos desc)
union
(select distinct nome_jogador, pontos,datahora, 2 as ordem
from jogador j inner join pontuacao_fx p
on j.id_jogador = p.id_jogador where pontos = (SELECT pontos FROM pontuacao_fx WHERE id_jogador=7 )
)
union
(SELECT distinct nome_jogador,pontos,datahora, 3 as ordem
from jogador j inner join pontuacao_fx p
on j.id_jogador = p.id_jogador WHERE pontos < (SELECT pontos FROM pontuacao_fx WHERE id_jogador=7 )
ORDER BY datahora desc, pontos desc);
) order by ordem asc,datahora desc, pontos desc
Estou de MYSQL gratuito com workbench e o erro é esse:
ERROR CODE:1248: EVERY DERIVED TABLE MUST HAVE ITS OWN ALIAS.
Peço encarecidamente socorro.
select * from (
(SELECT distinct nome_jogador,pontos,datahora, 1 as ordem
from jogador j inner join pontuacao_fx p
on j.id_jogador = p.id_jogador WHERE pontos > (SELECT pontos FROM pontuacao_fx WHERE id_jogador=7 )
ORDER BY datahora desc, pontos desc)
union
(select distinct nome_jogador, pontos,datahora, 2 as ordem
from jogador j inner join pontuacao_fx p
on j.id_jogador = p.id_jogador where pontos = (SELECT pontos FROM pontuacao_fx WHERE id_jogador=7 )
)
union
(SELECT distinct nome_jogador,pontos,datahora, 3 as ordem
from jogador j inner join pontuacao_fx p
on j.id_jogador = p.id_jogador WHERE pontos < (SELECT pontos FROM pontuacao_fx WHERE id_jogador=7 )
ORDER BY datahora desc, pontos desc);
) order by ordem asc,datahora desc, pontos desc
Estou de MYSQL gratuito com workbench e o erro é esse:
ERROR CODE:1248: EVERY DERIVED TABLE MUST HAVE ITS OWN ALIAS.
Peço encarecidamente socorro.
Luís Oliveira
Curtidas 0
Mais Respostas
Marcos P
23/02/2016
O problema deve estar ocorrendo por conta do ORDER BY que é genérico.
Tente o seguinte : em cada uma das queries use ALIAS especifico ( j1, p1, j2, p2,... ) e retire todos os ORDER BY ( só pra testar ).
Se funcionar, tente colocar o ORDER BY somente na clausula mais externa ( select * from... ).
Tente o seguinte : em cada uma das queries use ALIAS especifico ( j1, p1, j2, p2,... ) e retire todos os ORDER BY ( só pra testar ).
Se funcionar, tente colocar o ORDER BY somente na clausula mais externa ( select * from... ).
GOSTEI 1
Ramon
23/02/2016
Boa tarde amigao.
vc deve fazer um schema novo com as procedures de comparações para que vc consiga compilar o banco de forma corrente.
Veja as alterações que fiz, estão funcionando bacana:
select * from (
(SELECT distinct nome_jogador,pontos,datahora, 1 as ordem
from jogador j inner join pontuacao_fx p
on j.id_jogador = p.id_jogador WHERE pontos > (SELECT pontos FROM pontuacao_fx WHERE id_jogador=7 )
ORDER BY datahora desc, pontos desc)
union
(select distinct nome_jogador, pontos,datahora, 2 as ordem
from jogador j inner join pontuacao_fx p
on j.id_jogador = p.id_jogador where pontos = (SELECT pontos FROM pontuacao_fx WHERE id_jogador=7 )
)
union
(SELECT distinct nome_jogador,pontos,datahora, 3 as ordem
from jogador j inner join pontuacao_fx p
on j.id_jogador = p.id_jogador WHERE pontos < (SELECT pontos FROM pontuacao_fx WHERE id_jogador=7 )
ORDER BY datahora desc, pontos desc);
) order by ordem asc,datahora desc, pontos desc
Qualquer dúvida entre em contato.
Att,
DBA Senior.
vc deve fazer um schema novo com as procedures de comparações para que vc consiga compilar o banco de forma corrente.
Veja as alterações que fiz, estão funcionando bacana:
select * from (
(SELECT distinct nome_jogador,pontos,datahora, 1 as ordem
from jogador j inner join pontuacao_fx p
on j.id_jogador = p.id_jogador WHERE pontos > (SELECT pontos FROM pontuacao_fx WHERE id_jogador=7 )
ORDER BY datahora desc, pontos desc)
union
(select distinct nome_jogador, pontos,datahora, 2 as ordem
from jogador j inner join pontuacao_fx p
on j.id_jogador = p.id_jogador where pontos = (SELECT pontos FROM pontuacao_fx WHERE id_jogador=7 )
)
union
(SELECT distinct nome_jogador,pontos,datahora, 3 as ordem
from jogador j inner join pontuacao_fx p
on j.id_jogador = p.id_jogador WHERE pontos < (SELECT pontos FROM pontuacao_fx WHERE id_jogador=7 )
ORDER BY datahora desc, pontos desc);
) order by ordem asc,datahora desc, pontos desc
Qualquer dúvida entre em contato.
Att,
DBA Senior.
GOSTEI 0