Sử dụng row_number()
:
select group_id, player_id
from (
select
p.*,
row_number() over(
partition by p.group_id
order by case
when m.first_player = p.player_id then m.first_score
else m.second_score
end desc,
player_id
) rn
from players p
inner join matches m
on m.first_player = p.player_id or m.second_player = p.player_id
) x
where rn = 1
Bản trình diễn trên DB Fiddle :
| group_id | player_id |
| -------- | --------- |
| 1 | 65 |
| 2 | 20 |
Lưu ý:chỉ có một người chơi trong nhóm 3 (player_id 40) và họ không tham gia bất kỳ trò chơi nào.