Использовать оконную функцию :
select idg, nation, points, wk, r
from (
select idg, nation, points, extract(week from datag) as wk,
row_number() over (partition by extract(week from datag) order by points desc) as r
from games
) as dt
where r <= 3
Настройте SELECT по своему усмотрению. Вы можете добавить nation
к ORDER BY внутри PARTITION, если хотите получить уникальный рейтинг.
И если вы хотите сначала подсчитать количество недельных баллов для каждой страны, просто добавьте еще одну производную таблицу и немного подкорректируйте названия столбцов:
select nation, wk, wk_points, rn
from (
select nation, wk, wk_points,
row_number() over (partition by wk order by wk_points desc) as rn
from (
select nation, extract(week from datag) wk, sum(points) wk_points
from games
group by wk, nation
) as dt_sum
) as dt
where rn <= 3