2011-05-22 228 views
0

我有两个表 - cpmccad_idcpm)和clicksccad_id)。帮助,MySQL查询

当我运行:

SELECT cpm.ad_id, 
      COUNT(clicks.id) * cpm.cpm AS clicks_income  
    FROM cpm 
LEFT JOIN clicks on clicks.ad_id = cpm.ad_id and clicks.cc = cpm.cc 
GROUP BY cpm.ad_id, cpm.cc 

我得到:

ad_id | clicks_income 
--------------------- 
1  | 271.00 
1  | 2.60 
2  | 238.00 

现在的结果我想要的是:

ad_id | clicks_income 
--------------------- 
1  | 273.60 
2  | 238.00 

我怎么能集团仅cpmad_id和所有cc的SUM?

当我删除cpmcc我得到:

ad_id | clicks_income 
--------------------- 
1  | 273.00 
2  | 238.00 
+1

难道你只是想通过ad_id组合,而不是cc? – Jodes 2011-05-22 16:03:38

+0

是的,我做但看到我的编辑^ – ygaradon 2011-05-22 16:05:18

回答

1

不要使用COUNT(whatever) * acolumn,使用SUM(AColumn)代替。
另外一个LEFT JOIN在这里没有意义,因为一个不匹配只会增加NULL到总和,这不是很有帮助。

SELECT cpm.ad_id, SUM(cpm.cpm) AS clicks_income 
FROM cpm INNER JOIN clicks ON clicks.ad_id = cpm.ad_id AND clicks.cc = cpm.cc 
GROUP BY cpm.ad_id 
+0

非常感谢你! – ygaradon 2011-05-22 16:24:25

+0

@yonathan garti,当我开始使用MySQL时,我犯了完全相同的错误,并且我花了我一直的时间去调试。 – Johan 2011-05-22 16:27:34

+0

你知道小小玩这个查询后,我发现SUM(cpm.cpm)是什么使差异。但是我不能忽视这个逻辑。我的意思是mysql如何知道我打算将所有的点击次数与cpm相加。请你指点我一篇关于这个主题的好文章。并感谢阿金。 – ygaradon 2011-05-22 16:59:46

0
SELECT cpm.ad_id, COUNT(clicks.id)*cpm.cpm AS clicks_income 
FROM cpm LEFT JOIN clicks ON clicks.ad_id = cpm.ad_id AND clicks.cc = cpm.cc 
GROUP BY cpm.ad_id 
+0

@yonathan:请写评论,而不是通过编辑添加反馈到别人的答案。 – 2011-05-22 16:12:42

+0

当我通过'cc'删除组时,clicks_income不正确请参阅我的编辑^ – ygaradon 2011-05-22 16:18:01