sql >> Database >  >> RDS >> PostgreSQL

Hoe kan ik 3 tabellen samenvoegen en de juiste som van velden uit 2 tabellen berekenen, zonder dubbele rijen?

Als ik de logica goed begrijp, is het probleem het Cartesiaanse product dat wordt veroorzaakt door de twee joins. Uw zoekopdracht is een beetje moeilijk te volgen, maar ik denk dat de bedoeling beter kan worden afgehandeld met gecorreleerde subquery's:

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 ;

Hier is de corresponderende SQL Fiddle.

BEWERKEN:

De subselectie moet sneller zijn dan de group by op de niet-geaggregeerde gegevens. U hebt echter de juiste indexen nodig:ad_group_keyword_network(ad_group_keyword_id, ad_group_keyword_id, event_date, cost) en keyword_click(keyword_id, date, clicks) .



  1. Hoe opgeslagen procedures uit te schrijven naar bestanden?

  2. Hoe u een buitenlandse sleutelfout kunt oplossen bij het uitvoeren van migratie

  3. Hoe te controleren op dubbele invoer in DB?

  4. pg gem sslmode=verify-full, waar certificaten plaatsen?