Vấn đề là một tích số Descartes (trong đó các hàng trong một bảng đang được nhân với các hàng trong các bảng khác). Giả định mà cách tiếp cận sau đây đưa ra là mọi dự án đều có khối lượng công việc với các nhân viên được giao (tất cả đều tính cho tất cả nhân viên vì truy vấn của bạn không hiển thị tham gia vào bảng nhân viên) và các nhiệm vụ. Nếu không đúng như vậy, hãy xem xét thực hiện phép nối bên ngoài so với phép nối bên trong.
Ý tưởng là thực hiện mỗi tổng hợp trong bảng dẫn xuất của riêng nó dựa trên số dự án. Sau đó, chúng tôi có thể nối từng bảng dẫn xuất theo số dự án để thu được kết quả có ý nghĩa.
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;