本文主要是介绍每一题-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;
这篇关于每一题-104(银行账户概要)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!