Это самая большая проблема для каждой группы. Вы хотите фильтровать скорее агрегат.
Вы можете использовать коррелированный подзапрос для этого:
select co.continent, ci.name, ci.population
from city ci
inner join country co where co.code = ci.countryCode
where ci.population = (
select max(ci1.population)
from city ci1
inner join country co1 on co1.code = ci1.countryCode
where co1.continent = co.continent
)
Если вам повезло работать с MySQL 8.0, его проще использовать оконные функции:
select *
from (
select
co.continent,
ci.name,
ci.population,
rank() over(partition by co.continent order by ci.population desc) rn
from city ci
inner join country co where co.code = ci.countryCode
) t
where rn = 1