1555. Bank Account Summary

很喜欢这道题,很贴合实际,主要分析的是在经过各种转账,入账后各银行账户的余额。

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是对上述代码的优化建议: 1. 对于 `saleBoundArr?.length > 0` 这个条件判断,可以使用 `if (saleBoundArr && saleBoundArr.length)` 来代替,更加简洁明了。 2. 在获取客户详细信息的过程中,可以使用 `Promise.all()` 方法并行获取多个客户的详细信息,避免顺序执行耗费时间。 3. 可以使用 `Array.prototype.find()` 方法代替双重循环查找客户详细信息,提高查找效率。 4. 在获取客户详细信息时,可以使用 `map()` 方法将客户 `id` 数组转换为客户详细信息数组,避免使用多次 `push()` 方法。 下面是优化后的代码示例: ```javascript const processSaleBoundArr = async (saleBoundArr, tokenData, accountData) => { let saleOutBounds = []; if (saleBoundArr && saleBoundArr.length) { const customerIds = [...new Set(saleBoundArr.map(item => item.customer_id))]; const customerPromises = customerIds.map(id => { return getCustomerDetail( { id }, { "app-token": tokenData['app-token'], "X-GW-Router-Addr": accountData?.domain } ); }); const customerDetails = await Promise.all(customerPromises); saleOutBounds = saleBoundArr.map(saleBound => { const customerDetail = customerDetails.find(detail => detail.data.errcode === 0 && detail.data.data.customer_id === saleBound.customer_id); if (customerDetail) { const customerData = customerDetail.data.data; saleBound.account_open_addr = customerData.account_open_addr; saleBound.addr = customerData.addr; saleBound.bank = customerData.bank; saleBound.bank_account = customerData.bank_account; saleBound.taxpayer_no = customerData.taxpayer_no; saleBound.orgName = customerData.sale_dept_name; } return saleBound; }); } return saleOutBounds; }; ``` 这个优化后的代码使用了一些 JavaScript 的高级语法,如 `Promise.all()` 和 `Array.prototype.find()` 方法,使代码更加简洁高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值