sql >> Database teknologi >  >> RDS >> Oracle

SQL:Efter sammenføjning af tabeller returnerer funktionen SUM() forkert værdi

Det drejer sig om et kartesisk produkt (hvor rækker i en tabel bliver ganget med rækkerne i de andre tabeller). Den antagelse, som den følgende tilgang gør, er, at hvert projekt har en arbejdsbyrde med tildelte medarbejdere (som alle tegner sig for alle medarbejdere, da din forespørgsel ikke viser sammenføjningen til medarbejdertabellen) og opgaver. Hvis dette ikke er tilfældet, så overvej at lave ydre sammenføjninger versus den indre sammenføjning.

Ideen er at udføre hver aggregering i sin egen afledte tabel baseret på projektnummer. Vi kan derefter samle hver afledt tabel efter projektnummer for at opnå meningsfulde resultater.

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. PostgreSQL streaming replikering vs logisk replikering

  2. Beskedsystem i php mysql

  3. Tutorial om SQL (DDL, DML) om eksemplet med MS SQL Server-dialekt

  4. Normalisering i MYSQL