2016-05-31 16 views
0
SELECT 
DATE_TRUNC('day', payment.paid_at) AS "DAILY", 
COUNT(CASE WHEN product.type = 'A' THEN 1 ELSE NULL END) AS "A count", 
SUM(CASE WHEN product.type = 'A' AND payment.price_currency_code='USD' THEN payment.price_amount*1080 ELSE payment.price_amount END) AS "A revenue", 
COUNT(CASE WHEN product.type = 'B' THEN 1 ELSE NULL END) AS "B count", 
SUM(CASE WHEN product.type = 'B' AND payment.price_currency_code='USD' THEN payment.price_amount*1080 ELSE payment.price_amount END) AS "B revenue" 

こんにちは、場合、私は疑問を持っているとき、結果が不正確

「CASE WHENを」 私は、上記のようにクエリを書いたが、結果は不正確です。実際、各カテゴリごとの収益の合計は、現実には異なるはずです(カウントは正しいですが)。

私が紛失していることや間違っていることを指摘できれば幸いです!

感謝:)

答えて

1

それは実際にあなたはおそらく別の条件を意図した他のすべてを含めているのでバグは、あなたのELSE文にあります:ELSE case文で、また

SELECT 
DATE_TRUNC('day', payment.paid_at) AS "DAILY", 
COUNT(CASE WHEN product.type = 'A' THEN 1 END) AS "A count", 
SUM(CASE WHEN product.type = 'A' AND payment.price_currency_code='USD' THEN payment.price_amount*1080 WHEN product.type = 'A' THEN payment.price_amount END) AS "A revenue", 
COUNT(CASE WHEN product.type = 'B' THEN 1 END) AS "B count", 
SUM(CASE WHEN product.type = 'B' AND payment.price_currency_code='USD' THEN payment.price_amount*1080 WHEN product.type = 'B' THEN payment.price_amount END) AS "B revenue" 

をNULLは不一致のデフォルトの結果であるため、NULLは必要ありません。

+0

右よろしくお願いします。あなたの助けをありがとう、これは問題をきれいに解決:)ありがとう! – tmhs

関連する問題