每一题-104(银行账户概要)

题104:

根据下面两表写一条 SQL 语句,查询:

  • user_id 用户 ID
  • user_name 用户名
  • credit 完成交易后的余额
  • credit_limit_breached 检查是否透支 (“Yes” 或 “No”)

在这里插入图片描述
其中:

  • Users表:user_id 是主键,表中的每一列包含每一个用户当前的额度信息;
  • Transactions表:trans_id 是主键,表中的每一列包含银行的交易信息,ID 为 paid_by 的用户给 ID 为 paid_to 的用户转账。

解题思路:
(1)分别根据出账和进账分组求和,支出金额取反;
(2)利用union将(1)的进账和出账联合,再次分组求出每个用户的账户总金额;
(3)做左连接,还需要考虑null求和。

select 
    u.user_id,
    u.user_name,
    credit+ifnull(`amts`,0) credit,
    if((credit+ifnull(`amts`,0))<0,'Yes','No') credit_limit_breached 
from Users u 
left join (
    select user_id,sum(amt) amts from (
        (select paid_by user_id,-sum(amount) amt from transactions group by paid_by) 
        union
        (select paid_to user_id,sum(amount) amt from transactions group by paid_to)
        ) t group by user_id) t
on u.user_id = t.user_id;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值