首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >销售和退款表

销售和退款表
EN

Stack Overflow用户
提问于 2011-10-10 19:54:02
回答 2查看 352关注 0票数 0

我有一个"transactions“MySQL表,上面记录了我的产品的所有销售和退款。因此,每个记录表示销售或退款(由标志指示)、交易id、交易日期和交易的价值。在退款的情况下,还有一个refund_id,它指示此退款针对的是哪个交易id。

我是否可以只使用一个查询来计算在某个时间段内销售了多少(如果退款价值小于销售价值,则考虑销售)和总赚得金额(即销售价值减去退款价值)。

备注:

  1. 每次销售最多只能退款一次。
  2. 在退款的情况下,要记住的日期不是退款完成的日期(即在数据库中记录的特定退款),而是原始销售完成的时间
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-10 20:27:05

代码语言:javascript
复制
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是必需的。

此解决方案不会尝试确保每次销售只有一次退款,实际上,如果有多个退款,它将影响此解决方案的正确性。

票数 1
EN

Stack Overflow用户

发布于 2011-10-10 19:57:19

这可以结合使用self joingroup by来完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7712340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档