很喜欢这道题,很贴合实际,主要分析的是在经过各种转账,入账后各银行账户的余额。
select paid_by as user_id, -amount as trans
from Transaction
union all
select paid_to as user_id, amount as trans
from Transaction
这一步很关键,思路真的很优秀。可以让数据按照user_id分类计算
select Users.user_id as user_id
, Users.user_name as user_name
, credit+ifnull(sum(trans),0) as credit
, case when credit+ifnull(sum(trans),0)>0 then 'No' else 'Yes' end as credit_limit_breached
from(
select paid_by as user_id, -amount as trans
from Transaction
union all
select paid_to as user_id, amount as trans
from Transaction
) t right join users on t.user_id=users.user_id
group by user_id