gpt4 book ai didi

mysql - 从同一个表中选择两次,结果在同一行

转载 作者:行者123 更新时间:2023-11-29 12:34:01 24 4
gpt4 key购买 nike

我想在单个 mySQL 查询中生成从客户收到的总付款额和发送给供应商的总付款额的月度报告,该查询在同一行返回这两个总计。我可以使用 UNION 来做到这一点,但这会返回不同行的结果。所有付款均位于付款表中,其基本结构为:

id | id_order | id_contact | amount | date_time

更新:contact_id 可以是客户或供应商。相关的 contacts 表有一个字段 contact_type,可以是“SUP”或“CLI”。

我希望结果能够汇总在一段时间内从客户收到并发送给供应商的所有付款,这样我就可以根据实际付款产生利润,而不是根据订单销售价格(我的成本)产生理论利润,特别是因为这些订单是在很长一段时间内分期付款的,因此只要订单在 8 月支付 3000 美元,在 12 月支付 2000 美元,那么显示 6 月下达的订单在 6 月的利润为 5000 美元是没有意义的。

Month      | total $ sent to suppliers | total $ received from clients
June 2014 3000 5000
July 2014 2500 3800

我拥有的其他支持表是“订单”表、“联系人”表。有没有办法通过连接来做到这一点?这是否可能并且性能良好?如果不是,我还有什么其他选择? (我正在使用 MySQL 5.5,如果重要的话,我会在 PHP 中执行此操作)

最佳答案

您将使用条件聚合。您不提供关键信息,例如您如何知道某人是供应商还是客户。以下是查询的草图:

select date_format(date_time, '%M %Y') as month,
sum(case when contact_id = "supplier" then amount else 0 end) as sent,
sum(case when contact_id = "client" then amount else 0 end) as received
from table t
group by date_format(date_time, '%M %Y')
order by min(date_time);

注意排序依据。由于您使用的是非标准日期格式,这仍将确保行按时间顺序排列。

关于mysql - 从同一个表中选择两次,结果在同一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27066458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com