2016-06-17 41 views
0

我有一個相當複雜的查詢,我簡化了下來,試圖讓它理解。爲什麼MySQL不會添加這些列?

在下面的示例中,我試圖獲得兩種不同產品的銷售額的SUM。當我單獨檢索SUM時,按照前兩列,它們計算正確。

然而,(在第三列),一起加入兩個SUM查詢時,如果乘積Y已經賣出但NOT產品X,該值返回作爲完全空白。

任何想法,爲什麼這可能是?

SELECT 

    (
    SELECT SUM(IFNULL(product_x_sales.price, 0)) 
    FROM sales AS product_x_sales 
    GROUP BY product_x_sales.customer_id 
) AS "Total Sales of Product X", 

    SUM(IFNULL(product_y_sales.price, 0)) AS "Total Sales of Product Y", 

    (
    SELECT SUM(IFNULL(product_x_sales.price, 0)) 
    FROM sales AS product_x_sales 
    GROUP BY product_x_sales.customer_id 
) + (
    SUM(IFNULL(product_y_sales.price, 0)) 
) AS "Total Sales of Products X and Y" 

FROM customers 

JOIN sales AS product_y_sales ON customers.id = product_y_sales.customer_id 

GROUP BY agents.id 
+1

你能告訴我們採樣的輸入/輸出?考慮到它們不是聚合或包含在「GROUP BY」子句中,是否有意義包含這些子查詢? GROUP BY agents.id'中的別名'agents'是什麼?我不確定簡化查詢是個好主意。 –

+0

對我來說,這看起來就像您想要在右側創建總體總值的數據透視表一樣。您確定在客戶端應用程序中無法輕鬆實現嗎? – Shadow

+0

這是不對的。查詢的結果集將不正確。基本上,你的查詢有**三個**不同的SELECT語句做他們自己的事情。 –

回答

1

當X沒有銷售時,您選擇的結果將爲NULL。 向Y的銷售添加NULL將導致NULL。

SELECT SUM(IFNULL(product_x_sales.price, 0)) <-- = NULL 

改變它這個代替

SELECT IFNULL(SUM(IFNULL(product_x_sales.price, 0)), 0) 
+1

謝謝,解釋清楚,並解決了我的問題。 – Jack

相關問題