sql >> Databáze >  >> RDS >> Oracle

SQL:Po spojení tabulek funkce SUM() vrací špatnou hodnotu

Jde o kartézský součin (kde se řádky v jedné tabulce násobí řádky v ostatních tabulkách). Předpoklad, který vychází z následujícího přístupu, je, že každý projekt má pracovní vytížení s přiřazenými zaměstnanci (z nichž všichni představují všechny zaměstnance, protože váš dotaz neukazuje spojení s tabulkou zaměstnanců) a úkoly. Pokud tomu tak není, zvažte provedení vnějšího spojení oproti vnitřnímu spojení.

Cílem je provést každou agregaci ve vlastní odvozené tabulce na základě čísla projektu. Poté můžeme spojit každou odvozenou tabulku podle čísla projektu, abychom získali smysluplné výsledky.

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. výsledky balení Oracle sqlplus

  2. Vytvořit booleovský sloupec v MySQL s false jako výchozí hodnotou?

  3. Standardní metoda pro funkci IF() MySQL

  4. Jak nastavit uživatelské jméno a heslo pomocí generátoru zdrojového kódu Slick?