Oracle
 sql >> Baza danych >  >> RDS >> Oracle

SQL:Po połączeniu tabel funkcja SUM() zwraca błędną wartość

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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego Oracle.ManagedDataAccess nie działa, gdy działa Oracle.DataAccess?

  2. Kod inicjator Oracle PDO-oci

  3. Dzielenie dużej liczby wierszy na mniejsze zapytania? Równoległość

  4. JFreeChart przy użyciu zapytania numerycznego ORACLE

  5. Nie mogę użyć zmiennej wiążącej w datagrip