gpt4 book ai didi

mysql - 如何使用 where 和 Group by 返回多个求和结果

转载 作者:行者123 更新时间:2023-11-29 07:52:51 25 4
gpt4 key购买 nike

我正在尝试执行一个查询,我可以根据 where 子句并按日期进行分组来获取列的总和,但它的行为并不符合我的预期,并且不确定原因。

我有一个交易表:

时间戳 (transaction_date)
一个值(金额),
类型(付款或付款),
交易前的往年余额(结转),
和期末余额(余额)。

这是我的表的 JSON 导出:

[
{
"id":"2",
"type":"payout",
"carry":"2340",
"amount":"50",
"balance":"2290",
"transaction_date":"2014-09-15 00:00:00",
},
{
"id":"1",
"type":"payin",
"carry":"340",
"amount":"2000",
"balance":"2340",
"transaction_date":"2014-09-22 09:10:03",
},
{
"id":"3",
"type":"payout",
"carry":"0",
"amount":"50",
"balance":"0",
"transaction_date":"2014-09-22 09:10:03",
},
{
"id":"4",
"type":"payin",
"carry":"1",
"amount":"30",
"balance":"1",
"transaction_date":"2014-09-22 09:10:03",
}
]

我想要实现的是为每个日期(日历日期,而不是时间戳)获取一行,其中包含:
日期(同样是日历而不是时间戳),
任何一天交易之前的初始结转,
该日期的付款总额,
该日期的支出总额,
当日的最终期末余额。

目前我只得到一个结果,它似乎忽略了分组(将所有支付和所有支付相加,无论行日期如何)

SELECT DATE(`transaction_date`) as day, 
SUM(amount) AS pay_in
FROM transactions
WHERE type='payin' GROUP BY day

这是我正在使用的完整查询(减去进位和余额)

SELECT payins.day, payins.pay_in, payouts.pay_out 
From
(SELECT DATE(`transaction_date`) as day,
SUM(amount) AS pay_in FROM transactions
WHERE type='payin' GROUP BY DATE(`transaction_date`)
) payins
LEFT JOIN
(SELECT DATE(`transaction_date`) as day, SUM(amount) AS pay_out
FROM transactions
WHERE type='payout'
GROUP BY DATE(`transaction_date`)
) payouts
ON payins.day = payouts.day
Group By day

如果有什么区别的话,我在 OSX 10.9 上使用 MAMP 3.0.4

最佳答案

在这种情况下,您不需要使用子查询,您可以将 SUMCASE 结合使用。另外,您的分组似乎对我来说工作正常,为您的示例数据返回了 2 个结果(请参阅提供的 fiddle ):

SELECT Date(transaction_date) date,
SUM(CASE WHEN type='payin' THEN amount END)) payinsum,
SUM(CASE WHEN type='payout' THEN amount END) payoutsum
FROM transactions
GROUP BY date

关于mysql - 如何使用 where 和 Group by 返回多个求和结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25976446/

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