Depending on the DBMS you are using, you can use row_number in some form
In SQL Server 2008, you can use
create table
( Player char, Score int )
insert into
('A',5),('B',4),('A',3),('B',2),('A',1),('B',1),('A',2),('B',3),('A',4),('B',5)
select * from
select Player, Score from
(
select *, ROW_NUMBER() over(partition by Player order by Score desc) as rowNo
from
) as tmp
where tmp.rowNo <= 3
drop table
source
share