Chodzi o iloczyn kartezjański (gdzie wiersze w jednej tabeli są mnożone przez wiersze w innych tabelach). Założenie następującego podejścia jest takie, że każdy projekt ma obciążenie pracą z przypisanymi pracownikami (z których wszyscy stanowią wszystkich pracowników, ponieważ zapytanie nie pokazuje sprzężenia z tabelą pracowników) i zadaniami. Jeśli tak nie jest, rozważ wykonanie sprzężenia zewnętrznego zamiast sprzężenia wewnętrznego.
Pomysł polega na wykonaniu każdej agregacji we własnej tabeli pochodnej na podstawie numeru projektu. Następnie możemy połączyć każdą wyprowadzoną tabelę według numeru projektu, aby uzyskać znaczące wyniki.
SELECT
p.NAME,
w.workload_sum AS "Total Workload",
e.employee_count AS "Total Employees",
t.task_count AS "Finished Tasks"
from p
JOIN (select pno, sum(workload) as workload_sum
from w
group by pno) w ON (w.pno=p.pnumber)
JOIN (select pno, count(distinct w.essn) as employee_count
from w
group by pno) e ON (e.pno=p.pnumber)
JOIN (select pno, count(distinct t.name) as task_count
from t
group by pno) t ON (t.pno=p.pnumber)
WHERE t.END_DATE is NOT NULL;