sql >> Database >  >> RDS >> Oracle

SQL:na het samenvoegen van tabellen geeft de functie SUM() een verkeerde waarde terug

Het gaat om een ​​Cartesiaans product (waarbij rijen in de ene tabel worden vermenigvuldigd met de rijen in de andere tabellen). De veronderstelling die de volgende benadering maakt, is dat elk project een werklast heeft met toegewezen medewerkers (die allemaal verantwoordelijk zijn voor alle medewerkers aangezien uw zoekopdracht de join met de werknemerstabel niet laat zien) en taken. Als dit niet het geval is, overweeg dan om outer joins te doen versus de inner join.

Het idee is om elke aggregatie uit te voeren in een eigen afgeleide tabel op basis van projectnummer. We kunnen dan elke afgeleide tabel op projectnummer samenvoegen om zinvolle resultaten te verkrijgen.

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. MySQL:groeperen op datum BEREIK?

  2. hoe mysql-query te optimaliseren als ik te veel OR-operators in mijn query heb?

  3. Hoe verwijder je elke tabel in een specifiek schema in postgres?

  4. Doorgaan met een transactie na een fout in de primaire sleutel