sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur kan jag sammanfoga 3 tabeller och beräkna den korrekta summan av fält från 2 tabeller, utan dubbletter av rader?

Om jag förstår logiken rätt är problemet den kartesiska produkten som orsakas av de två kopplingarna. Din fråga är lite svår att följa, men jag tror att avsikten hanteras bättre med korrelerade underfrågor:

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 ;

Här är motsvarande SQL Fiddle.

EDIT:

Undervalet bör vara snabbare än group by på oaggregerade data. Du behöver dock rätt index:ad_group_keyword_network(ad_group_keyword_id, ad_group_keyword_id, event_date, cost) och keyword_click(keyword_id, date, clicks) .



  1. Hämta uppgifterna från förra månaden i SQL-servern

  2. Mysql inaktivera auto_increment kolumn temporärt i lagrad procedur

  3. Eka flera värden med samma kolumnnamn i samma tabell

  4. Kontrollera om det finns en databas (MySQL) och om inte skapa den i PHP