Jeśli dobrze rozumiem logikę, problemem jest iloczyn kartezjański spowodowany przez dwa sprzężenia. Twoje zapytanie jest trochę trudne do naśladowania, ale myślę, że intencje są lepiej obsługiwane przez skorelowane podzapytania:
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 ;
Tutaj to odpowiednie skrzypce SQL.
EDYCJA:
Podselekcja powinna być szybsza niż group by
na niezagregowanych danych. Potrzebujesz jednak odpowiednich indeksów:ad_group_keyword_network(ad_group_keyword_id, ad_group_keyword_id, event_date, cost)
i keyword_click(keyword_id, date, clicks)
.