2016-05-31 81 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语句中的错误,因为它包括一切的时候,其实你可能是为了不同的条件:

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" 

此外,case语句ELSE NULL不是必需的,因为NULL是非匹配的默认结果。

+0

哦对!谢谢你的帮助,这很好地解决了问题:)谢谢! – tmhs