这是我数据库结构的精简版本
affiliates
-id
users
-id
-affiliate_id
user_transactions
-id
-user_id
-amount - integer
-type - string(deposit, withdraw)
-deposit_time - timestamp
对于昨天发生的按类型(
affiliates
或deposit
等)汇总的事务,获得withdraw
的最有效方法是什么?所以本质上我需要SQL返回的是
affiliates.id, deposit_amount, withdraw_amount
我现在使用的是一个ORM,它基本上执行两个查询,一个是子公司的查询,然后执行以下内容:
select id
(select sum(amount) from user_transactions as ut where ut.deposit_time = DATE(?) and ut.user_id = users.id and ut.type = deposit) as deposit_amount,
(select sum(amount) from user_transactions as ut where ut.deposit_time = DATE(?) and ut.user_id = users.id and ut.type = withdraw) as withdraw_amount
from users where affiliate_id in ?
这是一个近似的查询。前2
?
是昨天的日期,第三个是前一个查询的用户id数组。在MySQL中,实现这一点最有效的方法是什么?
最佳答案
您不需要affiliates
表。一个简单的JOIN
,GROUP BY
和一些条件聚合就足够了:
select u.affiliate_id,
sum(case when type = 'deposit' then ut.amount else 0 end) as deposit,
sum(case when type = 'withdraw' then ut.amount else 0 end) as withdraw
from users u join
user_transactions ut
on ut.user_id = u.id
group by u.affiliate_id;
关于mysql - 如何从相距2度的表中对交易金额求和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50283610/