2012-03-02 70 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;