2014-02-19 162 views
0

我有这样的查询运行得很好:MYSQL GROUP BY和WHERE子句

SELECT offers.*, COALESCE(SUM(commission),0) AS revenue, COUNT(commission) AS leads 
FROM offers 
LEFT JOIN offers_revenue AS or ON or.offerid=offers.offerid 
GROUP BY offers.offerid 

这将返回我的所有与正确comission报价表中的行相加。

现在我需要添加一个WHERE子句(可以说,当某个条件满足并不总和):

SELECT offers.*, COALESCE(SUM(commission),0) AS revenue, COUNT(commission) AS leads, reversed 
FROM offers 
LEFT JOIN offers_revenue AS or ON or.offerid=offers.offerid 
WHERE reversed=0 
GROUP BY offers.offerid, reversed 

开始我尝试只需添加WHERE子句,但是这回我一个空集的结果,挖掘后我知道,你需要包括你的GROUP BY参数,并将它们包括在SELECT中,但仍然没有结果。

我在这里做错了什么?在第一个查询中,我测试表上的所有结果都被设置为reverse = 0,所以我必须在这里丢失一些东西。

+1

'WHERE逆转= 0' ==>'具有相反= 0'编辑:组后添加BY .. .... –

+0

HAVING没有做的伎俩。 –

回答

2

想必reversed是在or表。您通过比较将left outer join变成inner join。该解决方案是将条件移到on条款:

SELECT o.*, COALESCE(SUM(ofr.commission),0) AS revenue, COUNT(ofr.commission) AS leads, reversed 
FROM offers o LEFT JOIN 
    offers_revenue ofr 
    ON `ofr`.offerid = o.offerid and ofr.reversed = 0 
GROUP BY o.offerid; 
+0

啊!这是我想的首选方式,谢谢! –

2

尝试这与IF statment:

SELECT offers.*, if(reversed=0 , 0 , SUM(commission))) AS revenue, 

     COUNT(commission) AS leads, 
     reversed     
FROM offers 
LEFT JOIN offers_revenue AS or ON or.offerid=offers.offerid 
GROUP BY offers.offerid, reversed 
+0

“你的SQL语法错误”(是的,带走了你的评论) –

+0

ahh对不起,我忘了'''现在试试 –

+0

@echo_Me小异议如果不是语句,它是一个函数,是'IF(a, b,c)'是一个陈述。 –