2015-03-30 39 views
0

我得到的總存款金額錯誤。 我想輸出每個campaign_name 總存款的報告,並最終在日期範圍內輸出。爲左連接和GROUP BY獲取不正確的SUM

SELECT IFNULL(campaign_name,'DIRECT'), 
     IFNULL(TotalDeposit,0) 
FROM trackings 
LEFT JOIN 
    (SELECT deposit_amount, 
      sum(deposit_amount) AS TotalDeposit, 
      uuid 
    FROM conversions 
    LEFT JOIN transactions ON conversions.trader_id = transactions.trader_id 
    WHERE aff_id =3 
    AND TYPE='deposit' 
    GROUP BY transactions.trader_id) AS conversions ON trackings.uuid = conversions.uuid 
WHERE aff_id=3 
GROUP BY campaign_name 

結果:trynow活動中缺少200個?

campaign_name,TotalDeposit 
DIRECT,0.00 
new_campaign_name,0.00 
test march,500.00 
testing,0.00 
trynow,800.00 

預計業績:

campaign_name,TotalDeposit  
DIRECT,0.00 
new_campaign_name,0.00 
test march,500.00 
testing,0.00 
trynow,1000.00 
+1

將樣本數據填充到SqlFiddle(http://sqlfiddle.com/)中可能會有所幫助,以便人們可以隨意使用它。我知道我通常能夠更好地瞭解查看數據的內容,而不僅僅是查看查詢! – 2015-03-30 18:50:45

+0

沒有樣本數據,您的預期結果是無用的。 – 2015-03-30 18:53:55

+0

嵌套選擇看起來不一致。它僅由一個字段transactions.trader_id分組,同時SELECT子句中還有兩個字段。 – heximal 2015-03-30 18:55:13

回答

0

,我認爲你的數據是不完全正確 - 使用您所提供的500測試遊行存款永遠不會返回的數據,因爲它與trader_id 7506相關聯,而trader_id 7506在轉換表中沒有記錄。

但是,下面的查詢更簡單,更容易理解,併爲trynow

SELECT 
     IFNULL(SUM(t.deposit_amount),0) AS total_deposits 
    , IFNULL(tr.campaign_name,'DIRECT') AS campaign 


FROM 
    trackings tr   LEFT JOIN 

    conversions c ON 
     tr.uuid = c.uuid LEFT JOIN 

    transactions t ON 
     c.trader_id = t.trader_id AND 
     tr.`aff_id` = t.aff_id AND 
     t.type = 'Deposit' 

WHERE 
    tr.aff_id = 3 AND 
    tr.updated_at >= '2015-03-01' AND tr.updated_at < '2015-04-01' 

GROUP BY 
    IFNULL(tr.campaign_name,'DIRECT') 

正確返回1000如果你可以檢查所提供的測試數據或以其他方式指出我在正確的方向,我也許能以改善查詢返回到你想要的。

有關日期過濾,請參閱上面where子句的添加。注意,如果您需要在交易表中過濾日期,那麼日期過濾子句必須是「on」語句的一部分,而不是(因爲此表是左連接的,所以我們不能在主要where子句中過濾) 。

+0

Simon,謝謝,這將返回正確的結果,另外我試着根據你的語法添加一個affiliate_commissions表http://laravel.io/bin/E3e5m,但trynow的存款增加了四倍如何添加一個日曆表來檢查campaign_name totalDeposits在日期範圍?和任何關於我的表格結構的評論將不勝感激,因爲我肯定做錯了什麼。 – dflow 2015-03-30 20:28:13

+0

表的結構看起來相當複雜,但我沒有花很長時間試圖理解它背後的商業案例。理想的結構可能是一個單獨的問題,因爲我們已經解決了您最初在這裏遇到的問題。 – 2015-03-30 20:55:31

+0

在上面的答案中查看我的其他評論,重新:日期篩選和重複計算問題。 如果這個答案有幫助,那麼請「接受」它來顯示一些聲望點的愛! – 2015-03-30 21:06:39