Не могу решить проблему, где нужен подзапрос - PullRequest
0 голосов
/ 10 июля 2019

Вот проблема: в некоторых странах население в три с лишним раза превышает население любого из их соседей (на одном континенте). Даешь страны и континенты.

Вот как я пытался это сделать, это неправильно, sql, вероятно, не может выделить эти две группы населения как принадлежащие к разным странам, но я не знаю, как поступить.

Мой первый взгляд на это:

SELECT name, continent
FROM world
GROUP BY continent
WHERE (population/3) >= population;

Это моя вторая попытка:

select name, continent
from world x
where x.population in (select population from world where 
continent=x.continent and x.population>=(3*population))

1 Ответ

1 голос
/ 10 июля 2019

Один из способов сделать это - оператор ALL:

select t.name, t.continent
from world t
where (t.population / 3) > ALL (
  select population from world 
  where continent = t.continent and name <> t.name 
)

Подзапрос содержит все группы населения стран того же континента, что и страна строки, которую вы хотите сравнить (кроме этой страны).
Поэтому, если population / 3 этой страны больше, чем все эти группы населения, эта страна выбирается.
Или аналогично:

select t.name, t.continent
from world t
where (t.population / 3) > (
  select max(population) from world 
  where continent = t.continent and name <> t.name 
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...