sql >> Databáze >  >> RDS >> PostgreSQL

Jak mohu spojit 3 tabulky a vypočítat správný součet polí ze 2 tabulek, bez duplicitních řádků?

Pokud správně rozumím logice, problémem je kartézský součin způsobený dvěma spojeními. Váš dotaz je trochu těžké sledovat, ale myslím si, že záměr je lépe zpracován s korelovanými poddotazy:

select k.*,
       (select sum(cost)
        from ad_group_keyword_network n
        where n.event_date >= '2015-12-27' and
              n.ad_group_keyword_id = 1210802 and
              k.id = n.ad_group_keyword_id
       ) as cost,
       (select sum(clicks)
        from keyword_click c
        where (c.date is null or c.date >= '2015-12-27') and
              k.keyword_id = c.keyword_id               
       ) as clicks
from ad_group_keyword k
where k.status = 2 ;

Zde je odpovídající SQL Fiddle.

EDIT:

Podvýběr by měl být rychlejší než group by na neagregovaných datech. Potřebujete však správné indexy:ad_group_keyword_network(ad_group_keyword_id, ad_group_keyword_id, event_date, cost) a keyword_click(keyword_id, date, clicks) .



  1. Běží Parallel Hint v rámci Dynamic SQL of Oracle paralelně?

  2. Sphinx Search / MySQL najde nejběžnější slova

  3. INSERT INTO...SELECT pro všechny sloupce MySQL

  4. Jak zabránit tomu, aby Monitor aktivity poškodil výkon vašeho SQL serveru