Вы можете использовать аналитику для таких запросов:
SELECT name, region, population
FROM (SELECT region, name, population
, MAX(population) OVER (PARTITION BY region) maxpop
FROM bbc)
WHERE population = maxpop;
Встроенное представление дает вам таблицу, которая выглядит как ваша базовая таблица, плюс дополнительный столбец с максимальным населением для региона.Выбор высшего уровня дает вам страну, регион и население самой большой страны в каждом регионе.
Для иллюстрации на ограниченном примере:
SELECT * FROM bbc;
REGION NAME POPULATION
--------------- ------- ----------
North America USA 300000000
North America Canada 100000000
North America Mexico 50000000
South America Brazil 50000000
South America Argentina 40000000
South America Venezuela 20000000
Добавьте аналитическую функцию:
SELECT region, NAME, population
, MAX(population) OVER (PARTITION BY region) maxpop
FROM bbc;
REGION NAME POPULATION MAXPOP
--------------- ------- ---------- ----------
North America USA 300000000 300000000
North America Canada 100000000 300000000
North America Mexico 50000000 300000000
South America Brazil 50000000 50000000
South America Argentina 40000000 50000000
South America Venezuela 20000000 50000000
Тогда готовое произведение:
NAME REGION POPULATION
------- --------------- -----------
USA North America 300000000
Brazil South America 50000000
Еще одно редактирование.Вы можете избежать выбора гнезда, но не подзапроса:
SELECT NAME, region, population
FROM bbc
WHERE (region, population) IN
(SELECT region, MAX(population)
FROM bbc
group by region);