Ajuda com consulta para montar um ranking

23/02/2016

0

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.
Luís Oliveira

Luís Oliveira

Responder

Posts

23/02/2016

Marcos P

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... ).
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar