Для первого:
Вы должны разделить работу.Шаг первый, найдите соседей по стране.Это должно быть автоматическое объединение:
SELECT *
FROM bbc country
INNER JOIN bbc neighbours
ON country.region = neighbours.region
AND country.name != neighbours.name
Не забудьте исключить собственную страну из соседей!
Во-вторых, вы можете подсчитать, сколько соседей в стране имеют нужное население:
sum(CASE WHEN country.population > neighbours.population * 3 THEN 1 ELSE 0 END)
(Group by country !)
Сравните с итогом и все готово!
SELECT countryName
FROM
(
SELECT sum(CASE WHEN country.population > neighbours.population * 3 THEN 1 ELSE 0 END) as okNeighbours,
count(*) as totalNeighbours
country.name as countryName
FROM bbc country
INNER JOIN bbc neighbours
ON country.region = neighbours.region
AND country.name != neighbours.name
GROUP BY country.name
)
WHERE totalNeighbours = okNeighbours
Для второго:
SELECT name, region, population
FROM bbc
WHERE region IN (
SELECT region
FROM bbc
GROUP BY region
HAVING SUM(CASE WHEN population >= 25000000 THEN 1 ELSE 0 END) = 0
)