По таблице kk_employee из задачи “Соединение иерархической таблицы с обычной” составить иерархический запрос, который выдает по каждому сотруднику сумму зарплат его подчиненных а) включая его самого б) не включая его самого.
Потренируемся в определении суммы зарплат подчиненных (включая его самого) для одного конкретного сотрудника с id = 2. Без всяких подзапросов навешиваем на иерархический запрос агрегирующую функцию sum():
select sum(a.wage)
from kk_employee a
connect by prior a.id = a.boss_id
start with a.id = 2;
Теперь используем этот результат в качестве подзапроса в запросе по всем сотрудникам:
select b.id,
b.fio,
(select sum(a.wage)
from kk_employee a
connect by prior a.id = a.boss_id
start with a.id = b.id) as total_wage_sum
from kk_employee b;
К сожалению приходится для каждого сотрудника целиком раскручивать дерево, проходясь по одним и тем же ветвям несколько раз.
Теперь вычтем зарплату самого сотрудника, чтобы подсчитать сумму зарплат его подчиненных, не включая его самого:
select b.id,
b.fio,
(select sum(a.wage)
from kk_employee a
connect by prior a.id = a.boss_id
start with a.id = b.id) - b.wage as total_wage_sum_without_himself
from kk_employee b;
Задача. Простой календарь.