ロジックを正しく理解していれば、問題は2つの結合によって引き起こされるデカルト積です。クエリを追跡するのは少し難しいですが、意図は相関するサブクエリでより適切に処理されると思います:
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 ;
こちら 対応するSQLフィドルです。
編集:
副選択は、group by
よりも高速である必要があります 集計されていないデータ。ただし、適切なインデックスが必要です:ad_group_keyword_network(ad_group_keyword_id, ad_group_keyword_id, event_date, cost)
およびkeyword_click(keyword_id, date, clicks)
。