有一张简单的账户表 t_account,它记录了每次支出(或收入)的金额,只是缺了余额字段,我们需要在每笔账单后面计算出当时的账户余额。t_account 的部分数据:

    id  op      amount
------  ------  --------1  in          10002  exp          1243  exp           684  exp          2565  in            886  in           2007  exp           118  exp          404

其中,id 越大表示这条记录产生的时间越近,op 字段是操作类型,‘in’ 表示收入,‘exp’ 表示支出,amount 是每次操作的金额。

具体来说,当 id = 1 时,账户上增加了 1000,此时余额是 1000;

当 id = 2 时,账户减去了 124,此时余额是 1000 - 124 = 876;

当 id = 3 时,账户又减去了 68,此时余额是 1000 - 124 - 68 = 808;

直到 id = 5,账户上才又有了一笔收入,此时余额是 1000 - 124 - 68 - 256 + 88 = 640 。

最终算到 id = 8 时,账户的余额是 425 。

实际上,当 id = x 时,它余额就是将 id 小于等于 x 的所有记录的 amount 累加,如果遇到 op 的类型是 ‘exp’ 的记录,则相应的加法操作变成减法。

话不多说,直接上 SQL 。

SELECT *,(SELECT SUM(IF(op = 'exp', - 1 * amount, amount)) FROMt_account b WHERE b.id <= a.id) AS balance
FROMt_account a

结果呈现 >>>

    id  op      amount  balance
------  ------  ------  ---------1  in        1000  1000     2  exp        124  876      3  exp         68  808      4  exp        256  552      5  in          88  640      6  in         200  840      7  exp         11  829      8  exp        404  425

如果用窗口函数,那累加的写法会更简单些。

SELECT *,SUM(IF(op = 'exp', - 1 * amount, amount)) OVER (ORDER BY id) AS balance
FROMt_account a 

SQL 计算账户余额相关推荐

  1. sql计算留存_SQL无所不能:DBA宝妈宝爸系列分享

    原文链接:https://www.modb.pro/db/22315 目前程序从功能上其实已经完全满足客户(当然我这里的客户都是指媳妇儿)需求,具体可参考: 使用SQL计算宝宝每次吃奶的时间间隔 - ...

  2. SQL计算宝宝吃奶的时间间隔(二)

    导读:之前,在"数据和云"公众号发表过一篇文章<如何使用SQL计算宝宝每次吃奶的时间间隔(分析函数的使用)>,本文为续篇,如何提升程序的易用性. 因为我工作繁忙,时常不 ...

  3. 如何使用SQL计算宝宝每次吃奶的时间间隔(文末含PPT)

    编者的话:搞好SQL可以做很多事情,比如说可以解决海盗分金的问题,可以用SQL把大象装进冰箱,还可以用SQL解决环环相扣的刑侦推理问题,近期,有位读者朋友投稿了"使用SQL计算宝宝每次吃奶的 ...

  4. oracle 求一年多少天,SQL 计算一年有多少天

    SQL 计算一年有多少天,计算当前年份有多少天. SQL 计算一年有多少天 问题描述 计算当前年份有多少天. SQL 计算一年有多少天 解决方案 计算当前年份有多少天,等同于计算下一年的第一天和当前年 ...

  5. 编写python程序、计算账户余额_《易学Python》——第1章 为何学习Python 1.1 学习编程...

    本节书摘来自异步社区<易学Python>一书中的第1章,第1.1节,作者[澳]Anthony Briggs,王威,袁国忠 译,更多章节内容可以访问云栖社区"异步社区"公 ...

  6. 在DB2中,使用sql 计算昨天、最后一天等日期

    在DB2中,使用sql 计算想要的日期值,比如昨天,上月的最后一天,下个月的最后一天等. /* 作者:宾晓辰 微信:BD_BXC MAIL:646501050@QQ.COM PHONE:1802626 ...

  7. 2021_lg_03.SQL实战:如何用sql计算用户留存问题

    如何用sql计算用户留存问题 一.留存 1 .留存的含义: 留存:指基准日到APP的用户在之后的n日当天返回APP的人数: 留存率 = 基准日之后的n天当日返回的用户数 / 基准日的用户数 * 100 ...

  8. PL/SQL计算质数

     PL/SQL计算质数 2008-01-08 10:48:31|  分类: 默认分类 |  标签: |举报 |字号大中小 订阅 看到别人写的一片计算质数文章, 感觉不错:转过来学习一下. 目标很简 ...

  9. 使用SQL 计算一组数据的峰度、偏度 公式依据excel的KURT函数和SKEW函数 Oracle 数据库

    使用SQL 计算一组数据的峰度.偏度 公式依据excel的KURT函数和SKEW函数 因为工作原因,要把excel的KURT和SKEW函数在Oracle实现出来并统计,在网上找了半天没有答案..只能自 ...

最新文章

  1. Cisco asa 5510升级IOS和ASDM
  2. 高并发系列:存储优化之也许可能是史上最详尽的分库分表文章之一
  3. 逻辑模型设计步骤-关系模式定义
  4. 【Linux】9_存储管理交换分区管理Swap
  5. Java I/O体系原理
  6. 征稿 | JIST 2019 Regular Technical Papers
  7. batchplot3.5.9如何使用_VirtualBox中安装的Windows XP如何使用USB3.0
  8. CF 71C. Round Table Knights
  9. 全网最全-Java简历优化-专业技能
  10. python概率分析_请问如何通过Python做R*C列表的Fisher确切概率分析?
  11. 模块化存储区域网络(SAN)解决方案的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  12. java毕业设计学生学习评价系统Mybatis+系统+数据库+调试部署
  13. 小程序轮播图swiper实现
  14. 【故障分析】基于主成分分析实现三容水箱故障诊断附matlab代码
  15. LeetCode452用最少的箭射爆气球
  16. CentOS6安装rpm时报错“Cannot find a valid baseurl for repo: centos-sclo-rh“的解决办法
  17. 十年匠心,让国漫精致到羽翼丰满!《老鹰抓小鸡》幕后制作分享
  18. 求解单位冲激响应的笔记
  19. 你不得不了解的人工智能基础知识
  20. seo推广,seo推广是什么意思呢

热门文章

  1. 如何从上位机或者触摸屏设定Time或S5Time值?
  2. Apache服务器虚拟主机和别名配置及问题
  3. 软件研发中敏捷开发和迭代开发的异同
  4. c语言union内存大小,C语言、C++中的union用法总结
  5. 用 python 爬取 某珠宝网站
  6. 【五一创作】深度学习
  7. Android Compose Bloom 项目实战 (一) : 项目说明与配置
  8. 阿里P7大佬手把手教你!腾讯团队实力打造flutter入门教程,系列篇
  9. 人生因奋斗而变得有意义
  10. 四舍五入采用float