2012-03-02 44 views
0

我有以下查询,并且我正在尝试生成四列,即买方, 源,总数和返回的潜在客户。添加子查询

问题在于包含一个包含导联总数的列。返回的是我的数据库中的一列,其值为0或1.所以返回的是1的所有东西,但对于买过的导致,我需要的所有东西都是0.当我运行以下查询时,所有购买的导致最终成为0.我如何修复子查询以获得期望的结果。

SELECT 
    ba.buyer, 
    l.source, 
    (SELECT COUNT(*) FROM lead_status WHERE lead_id = l.id AND returned != 1) AS 'Bought Leads', 
    SUM(l.returned) AS 'Returned_Leads' 
FROM lead_status AS ls 
    LEFT JOIN leads AS l ON ls.lead_id = l.id 
    LEFT JOIN buyer_account AS ba ON ba.lead_buyer_id = ls.lead_buyer_id 
WHERE l.origin = 'PING_POST' 
    AND ls.discriminator IN('AUTO_POST','HOME_POST','HEALTH_POST','LIFE_POST') 
    AND DATE(ls.create_date) BETWEEN '2012-02-01' AND '2012-02-31' 
    AND l.sold = 1 AND ls.winner = 1 AND l.test = 0 AND l.returned = 1 
GROUP BY ls.buyer, l.source; 

回答

3

只是更换子查询:

SUM(1-l.returned) 

只要它有点领域,否则你应该让两个和一个CASE操作statment即总和(情况时返回0,1否则为0结束)。

+0

创意,我喜欢它比我多。效率也更高。 – JKomusin 2012-03-02 21:58:13

+1

如果不是位域,则采用减法的abs()得出0和1的值 – Sparky 2012-03-02 22:53:29

1

尝试

SUM(abs(l.returned-1)) 
  • 如果返回为0,它会返回-1
  • 仿佛回到了1,返回0

服用ABS()价值给你+1所以你的SUM()应该工作

1

我想你可以做到这一点作为替代,如果它是一个二进制的1或0:

SELECT 
    ba.buyer, 
    l.source, 
    COUNT(l.returned) - SUM(l.returned) AS 'Bought Leads', 
    SUM(l.returned) AS 'Returned_Leads' 
FROM lead_status AS ls 
    LEFT JOIN leads AS l ON ls.lead_id = l.id 
    LEFT JOIN buyer_account AS ba ON ba.lead_buyer_id = ls.lead_buyer_id 
WHERE l.origin = 'PING_POST' 
    AND ls.discriminator IN('AUTO_POST','HOME_POST','HEALTH_POST','LIFE_POST') 
    AND DATE(ls.create_date) BETWEEN '2012-02-01' AND '2012-02-31' 
    AND l.sold = 1 AND ls.winner = 1 AND l.test = 0 AND l.returned = 1 
GROUP BY ls.buyer, l.source;