假设有借贷记录表,字段有借入,贷出,以及记账日期。表中记录如下所示:

现在想统计某一天,或者某一时间段内,每天的借贷累总额,以及历史累计总额,比如,2021-10-07日的借贷总额是1100,1000,历史累计值是6500,5500。那在MySQL中如何统计呢?方法有多种。下面演示某段时间内,每天的借贷总额以及历史累计总额的求法。如果求某一天的情况,则where条件就更简单了。

1. 先利用函数sum()求出每天的借贷总额,再利用窗口函数over()求历史累计值(窗口函数对MySQL版本有要求)。

select tmp.book_date, tmp.day_debit, tmp.accu_debit, tmp.day_credit, tmp.accu_credit
from(select t.book_date, t.day_debit, sum(t.day_debit) over(order by book_date)  as accu_debit, t.day_credit, sum(t.day_credit) over(order by book_date)  as accu_creditfrom  ( SELECT book_date, sum(debit) as day_debit, sum(credit) as day_creditFROM test GROUP BY book_dateORDER BY book_date) tgroup by t.book_date
) tmp
where tmp.book_date >= '2021-10-05' and tmp.book_date <= '2021-10-07'

2. 先利用函数sum()求出每天的借贷总额,再利用临时变量求历史累计值。

select tmp.book_date, tmp.day_debit, tmp.accu_debit, tmp.day_credit, tmp.accu_credit
from(select t.book_date, t.day_debit, @accu_debit:= @accu_debit + t.day_debit as accu_debit, t.day_credit, @accu_credit:= @accu_credit + t.day_credit as accu_creditfrom  ( SELECT book_date, sum(debit) as day_debit, sum(credit) as day_creditFROM test GROUP BY book_dateORDER BY book_date) t, (select @accu_debit:=0, @accu_credit:=0) cgroup by t.book_date
) tmp
where tmp.book_date >= '2021-10-05' and tmp.book_date <= '2021-10-07'

3. 先利用函数sum()求出每天的借贷总额,再利用join求出历史累计值。

SELECT a.book_date, a.day_debit, SUM(b.day_debit) AS accu_debit, a.day_credit, SUM(b.day_credit) AS accu_credit
FROM (SELECT book_date, sum(debit) as day_debit, sum(credit) as day_creditFROM test GROUP BY book_dateORDER BY book_date
) a
JOIN (SELECT book_date, sum(debit) as day_debit, sum(credit) as day_creditFROM test GROUP BY book_dateORDER BY book_date
) b ON a.book_date >= b.book_date
WHERE a.book_date >= '2021-10-05' and a.book_date <= '2021-10-07'
GROUP BY a.book_date
ORDER BY a.book_date;

MySQL查询累计值的方法相关推荐

  1. mysql 查询rowno_C# Mysql 查询 Rownum的解决方法

    C# Mysql 查询 Rownum的解决方法,需要的朋友可以参考一下 Sql: 代码如下: SELECT @rownum:=@rownum+1 AS rownum, a.order_id , cas ...

  2. sqlserver 累计数量_用sqlserver查询累计值

    如何用SQL Server查询累计值 作者: Builder.com.cn 2006-12-11 05:34 PM 有这样一个要求,它要创建一个SQL Server查询,其中包括基于事件时刻的累计值. ...

  3. mysql pt-kill_percona-toolkit之pt-kill 杀掉mysql查询或连接的方法

    pt-kill 是一个非常简单的 杀mysql线程和查询的 工具. 主要是为了防止一些长的查询 长时间占用 系统资源,而对线上业务造成影响的情况. 主要作用: 从show processlist 中获 ...

  4. mysql 查询获取排名的方法

    需求:获取分类平均值的名次? 比如10个班级的平均分,按照班级名称排序,后面跟着名次.记录表:student :字段:banji 班级:AvgS 平均分:pm 排名:解决方法: SELECT clas ...

  5. mysql查询很慢优化方法1

    解决方法: 关联的字段建索引. 具体分析如下: 举例: 表格:培训学生表,班级报名表 需求:查询出学生报了哪些班级 两表有个关联字段"CD"(学生学号). 视图sql: SELEC ...

  6. mysql 查询获取排名的方法(绝对有效)

    我去他大爷的,为了查询后搞个排名,在网上找了一下午的资料,对照着网上那些所谓的方法试了几十遍,每一个有效的! 没想到这快要下班的时候,居然找到了一种有效的方法,经本人测试,绝对没问题! ======= ...

  7. c#中使用mysql查询语句_遇到@符合怎么办_C# Mysql 查询 Rownum的解决方法

    C# 一段程序如下,执行出错,错误信息是 "Parameter '@rowNum' must be defined" 但是直接在 mySql workbatch 中运行是正确的!! ...

  8. mysql查询最近三个月数据方法

    select * from t_user where time>DATE_SUB(CURDATE(), INTERVAL 1 WEEK) --一周 select * from t_user wh ...

  9. mysql查询和修改一个命令_MYSQL的常用命令和增删改查语句

    连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [ ...

最新文章

  1. python 第一课
  2. php代码常见的变量缩写,PHP代码简洁之道——变量部分
  3. 为什么Java在后来的版本中,给接口增加了默认方法、静态方法、私有方法?
  4. PWN-PRACTICE-BUUCTF-16
  5. 从单片机转到嵌入式Linux的跨度大吗?
  6. java.util.Date和java.sql.Date的区别及应用
  7. 火出天际的“元宇宙”究竟是什么?
  8. 执行quartz报错java.lang.NoClassDefFoundError: javax/transaction/UserTransaction
  9. [读书笔记]Linux命令行与shell编程读书笔记01
  10. Excel如何实现随机不重复抽取
  11. 网站日志分析软件--让网站日志分析工作变得更简单
  12. 【PPT模板】甄选100套时间轴精品
  13. android蓝牙键盘输入法,手机外接蓝牙键盘,用什么输入法好?
  14. BRAF蛋白F595S G615R突变的影响
  15. MySQL数据库 引擎
  16. [论链]ST-MGCN. Spatiotemporal Multi-Graph Convolution Network for Ride-Hailing Demand Forecasting
  17. 你好,法语!A1课文背诵汇总
  18. 计算机表格中如何计算数据透视表,Excel表格中在数据透视表中添加计算字段的方法...
  19. 系统解剖学整理2.0.0(考前终极更新!!!)
  20. [EDI案例] 法雷奥/Valeo EDI解决方案

热门文章

  1. linux下dns配置文件name,Linux 本地dns配置文件详解
  2. T60上安装Gentoo笔记
  3. 智慧农业数字物联系统ECIOT V3.0助力农业大田大棚及农业产业园数字化升级
  4. matlab怎么把音频变成信号_matlab处理音频信号33
  5. Python 快速排序,代码实现
  6. 领跑两轮电动车江湖,谁是“关键先生”?
  7. 从 dpkg deb 包开始分析 deb 包的内容及 dpkg 安装包的过程
  8. 【图像分割】基于OUST、均值聚类和区域生长法实现医学图像处理系统附GUI界面
  9. Excel批量将文本中的【】替换为[]
  10. 【FFmpeg笔记】03-Win10编译ffmpeg4.2.1(For Android)