Используйте правильный, явный, стандартный JOIN
синтаксис. Запятые были заменены на 20 лет a go.
Затем вам нужны оконные функции:
SELECT tp.*
FROM (SELECT t.tname, p.pname, SUM(m.Goals) as goals,
RANK() OVER (PARTITION BY t.tname ORDER BY SUM(m.Goals) DESC) as seqnum
FROM matches m JOIN
team t
ON t.TID = p.TID JOIN
player p
ON p.PNB = m.PNB
GROUP BY p.pname, t.tname
) tp
WHERE seqnum = 1
ORDER BY goals DESC;
Возвращает всех игроков с самыми высокими значениями. Если вам нужна только одна строка, используйте ROW_NUMBER()
вместо RANK()
.