Yang dipermasalahkan adalah produk Cartesian (di mana baris dalam satu tabel dikalikan dengan baris di tabel lainnya). Asumsi yang dibuat oleh pendekatan berikut adalah bahwa setiap proyek memiliki beban kerja dengan karyawan yang ditugaskan (yang semuanya memperhitungkan semua karyawan karena kueri Anda tidak menunjukkan gabungan ke tabel karyawan) dan tugas. Jika tidak demikian, pertimbangkan untuk melakukan gabungan luar versus gabungan dalam.
Idenya adalah untuk melakukan setiap agregasi dalam tabel turunannya sendiri berdasarkan nomor proyek. Kami kemudian dapat menggabungkan setiap tabel turunan dengan nomor proyek untuk mendapatkan hasil yang berarti.
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;