sql >> Databasteknik >  >> RDS >> Oracle

SQL:Efter sammanfogning av tabeller returnerar funktionen SUM() fel värde

Det handlar om en kartesisk produkt (där rader i en tabell multipliceras med raderna i de andra tabellerna). Antagandet som följande tillvägagångssätt gör är att varje projekt har en arbetsbelastning med tilldelade anställda (som alla står för alla anställda eftersom din fråga inte visar kopplingen till medarbetartabellen) och uppgifter. Om detta inte är fallet, överväg att göra yttre sammanfogningar kontra den inre sammanfogningen.

Tanken är att utföra varje aggregering i sin egen härledda tabell baserat på projektnummer. Vi kan sedan sammanfoga varje härledd tabell efter projektnummer för att få meningsfulla resultat.

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. Åtkomst nekad för MYSQL ERROR 1045

  2. Hur ATAN() fungerar i MariaDB

  3. Vilken kolumntyp/längd ska jag använda för att lagra ett hashat Bcrypt-lösenord i en databas?

  4. SQL join subquery