2016-06-17 10 views
0

私はかなり複雑なクエリを持っています。ここでは単純化して理解できるようにしています。MySQLがこれらの列を追加しないのはなぜですか?

以下の例では、2つの異なる製品の売上のSUMを取得しようとしています。最初の2つの列ごとにSUMを個別に取得すると、正しく計算されます。

しかし、製品Yが販売されているが、NOT製品Xは、値として完全に空白を返す場合、(第3列に)2つのSUMクエリを追加するとき。

これは何故でしょうか?

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句に集約されていないか、または含まれていないと仮定すると、それらのサブクエリを含めることは意味がありますか? Whenceは 'GROUP BY agents.id'のエイリアス' agents'ですか?私はあなたのクエリを簡素化することが良いアイデアであるかどうかはわかりません。 –

+0

これは、右側に全体的な合計値を持つピボットテーブルを作成する場合と同じように見えます。これをクライアントアプリケーションで簡単に達成できないと確信していますか? – Shadow

+0

これは正しくありません。クエリの結果セットが正しくありません。基本的に、あなたのクエリは、独自のことをする** THREE **異なる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

関連する問題