sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan kan jeg forbinde 3 tabeller og beregne den korrekte sum af felter fra 2 tabeller, uden duplikerede rækker?

Hvis jeg forstår logikken rigtigt, er problemet det kartesiske produkt forårsaget af de to joinforbindelser. Din forespørgsel er lidt svær at følge, men jeg tror, ​​at hensigten er bedre håndteret med korrelerede underforespørgsler:

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 ;

Her er den tilsvarende SQL Fiddle.

EDIT:

Undervalget skal være hurtigere end group by på de uaggregerede data. Du har dog brug for de rigtige indekser:ad_group_keyword_network(ad_group_keyword_id, ad_group_keyword_id, event_date, cost) og keyword_click(keyword_id, date, clicks) .



  1. Kan jeg pivotere datorækker til kolonner uden at skulle angive datoerne i pivoten? Oracle SQL

  2. Indsæt udvalgte data i databasen

  3. Kan ikke få antallet af rækker og hente ved brug af MySQLi forberedt sætning

  4. matchende tabeller navn med show tabeller