Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

SQL:Sau khi nối các bảng, hàm SUM () trả về giá trị sai

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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách nhận thông tin đầu vào từ người dùng trong thời gian chạy

  2. Cách viết một thủ tục PL / SQL với tham số đầu vào x và đầu vào / đầu vào của tham số x được kết hợp

  3. Hàm TO_DSINTERVAL () trong Oracle

  4. CSV trong nhà phát triển SQL…

  5. Cơ sở dữ liệu sao chép Oracle SQL Developer từng bước