我有一个"transactions“MySQL表,上面记录了我的产品的所有销售和退款。因此,每个记录表示销售或退款(由标志指示)、交易id、交易日期和交易的价值。在退款的情况下,还有一个refund_id,它指示此退款针对的是哪个交易id。
我是否可以只使用一个查询来计算在某个时间段内销售了多少(如果退款价值小于销售价值,则考虑销售)和总赚得金额(即销售价值减去退款价值)。
备注:
发布于 2011-10-10 20:27:05
SELECT SUM(numberofsales) as numberofsales,SUM(salevalue)
FROM (
--handle sales with refunds
SELECT count(sales) as numberofsales, sum(sales.value-refunds.value) as salevalue
FROM Transactions sales
LEFT JOIN transactions refunds ON sales.transid=refunds.refundid
WHERE refunds.refundid IS NOT NULL
AND sales.value-refund.value>0
AND sales.date>@begindate
AND sales.date<@enddate
AND sales.refund_flag='s'
UNION
--handle sales without refunds
SELECT count(sales) as numberofsales, sum(sales.value) as salevalue
FROM Transactions sales
LEFT JOIN transactions refunds ON sales.transid=refunds.refundid
WHERE refunds.refundid IS NULL
AND sales.date>@begindate
AND sales.date<@enddate
AND sales.refund_flag='s')这是第一次通过解决方案的主要特征。它使用的是SQL Server语法,我不确定sql server和mysql之间的区别。
根据上面Michael667的回答,您可以看到self加入以获得每笔销售的退款。我不认为group by是必需的。
此解决方案不会尝试确保每次销售只有一次退款,实际上,如果有多个退款,它将影响此解决方案的正确性。
发布于 2011-10-10 19:57:19
这可以结合使用self join和group by来完成。
https://stackoverflow.com/questions/7712340
复制相似问题