Nếu tôi hiểu logic một cách chính xác, vấn đề là tích Descartes do hai phép nối gây ra. Truy vấn của bạn hơi khó theo dõi, nhưng tôi nghĩ mục đích được xử lý tốt hơn với các truy vấn con tương quan:
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 ;
Tại đây là SQL Fiddle tương ứng.
CHỈNH SỬA:
Lựa chọn con phải nhanh hơn nhóm group by
trên dữ liệu chưa được tổng hợp. Tuy nhiên, bạn cần các chỉ mục phù hợp:ad_group_keyword_network(ad_group_keyword_id, ad_group_keyword_id, event_date, cost)
và keyword_click(keyword_id, date, clicks)
.