Хитрая часть, которую я вижу здесь, это то, что вы хотите УРОВЕНЬ заголовка от «ВНУТРЬ ВЕРХ» и НАСЕЛЕНИЕ от «ВЕРХНУЮ ВНИЗ». Например, уровень AMERICA должен быть равен 2, что означает, что УРОВЕНЬ должен измеряться с помощью AMERICA -> WORLD, но население AMERICA должно составлять 25, что является суммой населения, измеренного с помощью AMERICA -> NEWYORK. Итак, я попробовал это:
SELECT TOP_TO_BOTTOM.TITLE_ALIAS, TOP_TO_BOTTOM.TOTAL_POPULATION, BOTTOM_TO_TOP.MAX_LEVEL FROM
(SELECT TITLE_ALIAS, SUM(POPULATION) AS "TOTAL_POPULATION" FROM
(SELECT CONNECT_BY_ROOT TITLE AS "TITLE_ALIAS", POPULATION
FROM TB_POPULATION
CONNECT BY PRIOR ID = PARENT_ID)
GROUP BY TITLE_ALIAS) "TOP_TO_BOTTOM"
INNER JOIN
(SELECT TITLE_ALIAS, MAX(LEV) AS "MAX_LEVEL" FROM
(SELECT CONNECT_BY_ROOT TITLE AS "TITLE_ALIAS", LEVEL AS "LEV"
FROM TB_POPULATION
CONNECT BY PRIOR PARENT_ID = ID)
GROUP BY TITLE_ALIAS) "BOTTOM_TO_TOP"
ON
BOTTOM_TO_TOP.TITLE_ALIAS = TOP_TO_BOTTOM.TITLE_ALIAS
ORDER BY BOTTOM_TO_TOP.MAX_LEVEL;
Вы можете посмотреть на симуляцию здесь: https://rextester.com/HFTIH47397.
Надеюсь, это поможет вам