CREATE TABLE `players` (
`pid` int(2) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`score` int(2) NOT NULL,
`game` varchar(20) NOT NULL,
PRIMARY KEY (`pid
You want to use a group by statement rather than a subselect to solve this particular type of problem.
You need to do the aggregation in a subquery and then use the variables to get the rank:
select pid, name, game, score, (@rn := @rn + 1) as rank
from (select pid, name, game, SUM(score) as score
from player
where game = 'aa'
group by pid, game
) p cross join
(select @rn := 0) vars
order by score desc;