Как мой MySQL-запрос, дающий ранг всех игр, может просто дать рейтинг каждой из лучших игроков? - PullRequest
1 голос
/ 27 марта 2019
SELECT 
1+(SELECT count(*) from games a WHERE a.score > g.score) as rank,
score, p.leaderboard_initials, p.operating_system
FROM games g
inner join players p on (p.google_id = g.google_id)
ORDER BY score DESC
LIMIT 0, 100;

Возвращает таблицу лидеров с КАЖДОЙ игрой для игрока.

enter image description here

Мне нужно вернуть таблицу лидеров, в которой указана только ЛУЧШАЯ игра для каждого игрока. Так что 44rhh все еще будет на вершине, затем следует DMC, но тогда BMO будет на третьем месте.

Я знаю, что решение должно быть простым, но я просто не могу думать, как это сделать!

1 Ответ

1 голос
/ 27 марта 2019

вы можете выбрать группу максимального балла с помощью leaderboard_initials

вы можете выбрать группу максимального балла с помощью leaderboard_initials

set @rank=0;
select (@rank:=@rank+1) rank , leaderboard_initials, max(score)  max_score  
from  (
    SELECT 
    1+(SELECT count(*) 
    from games a WHERE a.score > g.score) as rank,
    score, p.leaderboard_initials, p.operating_system
    FROM games g
    inner join players p on (p.google_id = g.google_id)
    ORDER BY score DESC
    LIMIT 0, 100;
) t  
group by leaderboard_initials 
order by max_score DESC 
...