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

该SQL语句用于查询Users表中的用户ID、用户名以及在考虑Transactions表中交易信息后的用户余额,并判断用户是否透支。首先,通过UNION结合Transactions表中的出账和进账信息,计算每个用户的总交易金额。然后,使用LEFT JOIN将结果与Users表连接,计算用户的最终信用余额,并根据余额判断是否透支(透支标记为'Yes',否则为'No')。
摘要由CSDN通过智能技术生成

题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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值