这篇文章在爱可生开源社区首发《技术分享 | MySQL中一个聚类增量统计 SQL 的需求》。

同事提了一个MySQL数据库中SQL增量统计的问题,我用测试数据模拟一下,测试表tt有三个字段,code是标识名称,cdate是对应的日期,ctotal是个统计值,

原始的统计语句,按照code和cdate进行聚类,统计出每个code每个月ctotal累加的记录数,

但是他的需求是能按照code+cdate的统计值进行累加显示,例如上图中第一行的total是10,第二行的total就显示10+9=19,第三行的total就显示10+9+11=30,以此类推。

他需要的是total逐行累加,MySQL中可以通过定义变量累加来实现,利用@i逐行累加,

但是有个问题,不同的code,未做归零处理,例如上图中,code=BBB的第一行记录,total应该是5,当前是35,明显是30+5得到的。

此处应该再加个逻辑,按照code聚类的同时做sum求和计算,如下所示,此时就可看到,g_total按照code和cdate进行累加,不同的code,就会归零,重新计算,

其实这块还可以继续优化,MySQL 8.0支持with,如上SQL中对tt表读了两次,借助于with,就可以降低为只读一次tt表,

另外,结合实际的检索场景需求,考虑为相关字段增加索引,进一步提升数据检索的效率。

当然,以上的SQL可能有其他的替代方案或者更好的方案,本文只是给出了其中一种解决的路径。

因此,通过SQL实现业务需求,一方面需要充分理解需求的含义,能准确地映射到具体的SQL逻辑上,另一方面则要了解所用数据库支持的函数、功能、特性等,是否有能契合到这个需求的实现,除此之外,非功能的因素,也是不可忽视的,合适的索引、避免重复读数据、避免不必要的排序等都是我们可以利用的手段,这就是"兵无常势,水无常形"。

小白学习MySQL

《小白学习MySQL - 你碰到过这种无法登陆的场景?》

《小白学习MySQL - 不同版本创建用户的些许区别》

《小白学习MySQL - 随机插入测试数据的工具》

《小白学习MySQL - varchar类型字段为什么经常定义成255?》

《小白学习MySQL - 变通创建索引的案例一则》

《小白学习MySQL - “投机取巧”统计表的记录数》

《小白学习MySQL - 一次慢SQL的定位》

《小白学习MySQL - TIMESTAMP类型字段非空和默认值属性的影响》

《小白学习MySQL - 聊聊数据备份的重要性》

《小白学习MySQL - InnoDB支持optimize table?》

《小白学习MySQL - table_open_cache的作用》

《小白学习MySQL - 表空间碎片整理方法》

《小白学习MySQL - 大小写敏感问题解惑》

《小白学习MySQL - only_full_group_by的校验规则》

《小白学习MySQL - max_allowed_packet》

《小白学习MySQL - mysqldump保证数据一致性的参数差异》

《小白学习MySQL - 查询会锁表?》

《小白学习MySQL - 索引键长度限制的问题》

《小白学习MySQL - MySQL会不会受到“高水位”的影响?》

《小白学习MySQL - 数据库软件和初始化安装》

《小白学习MySQL - 闲聊聊》

近期更新的文章:

《腾讯会议号设计的几种猜测》

《充电宝的玄机》

《新赛季的中超和国安,荆棘中前行》

《Oracle的CTAS能不能将约束等属性带到新表?》

《故障树分析法(FTA)》

文章分类和索引:

《公众号1000篇文章分类和索引》

小白学习MySQL - 增量统计SQL的需求相关推荐

  1. 小白学习MySQL - Generated Columns功能

    碰巧看到MySQL有这种的语法"INTEGER GENERATED ALWAYS AS IDENTITY",一知半解,了解一下. 官方文档介绍了这种Generated Column ...

  2. 小白学习MySQL - 一次慢SQL的定位

    同事提了个问题,某套测试环境MySQL执行语句出现hang. 作为小白,每次碰到问题,都是在积累经验.执行SQL出现hang,说明应该有会话处于等待状态,可以通过show processlist看下当 ...

  3. 小白学习MySQL - varchar类型字段为什么经常定义成255?

    很多时候我们看到一些表字符串类型的字段定义为varchar(255),开始以为varchar只能定义为255这个长度值,其实不然. 官方文档所说,varchar有效的最大长度取决于行的容量,以及用的字 ...

  4. 小白学习MySQL - InnoDB支持optimize table?

    MySQL数据库中进行表空间整理,可以用的一种操作就是optimize table, OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL]TABLE tbl_name [, tb ...

  5. 小白学习MySQL - 不同版本创建用户的些许区别

    MySQL创建用户有很多种方法,例如常规create user,再通过grant,授予权限,还可直接grant连带创建用户和授权一起做了.最近创建过程中,发现不同版本操作有些区别. MySQL 5.7 ...

  6. 小白学习MySQL - 聊聊数据备份的重要性

    最近某套MySQL数据库服务器异常关机,导致MySQL不能正常拉起来,启动过程中,error日志中记录了如下的信息,可以看到,数据库因为异常关闭,此时会进行实例恢复的操作, [Note] InnoDB ...

  7. 小白学习MySQL - 数据库软件和初始化安装

    作为个人学习环境来说,搭建一套VMWare的环境,算是性价比最高的一种选择,当然你可以购买一些公有云服务器(有些则是免费的,例如Oracle Cloud,可参考<Oracle Cloud云端账号 ...

  8. 零基础带你学习MySQL—分组统计(十二)

    零基础带你学习MySQL-分组统计(十二) 如何理解分组 ? 课后练习题

  9. mysql 报表统计sql使用实例_mysql 案例~mysql元数据的sql统计

    一 简介:今天我们来收集下提取元数据的sql 二 前沿: information_schema  引擎 memory 元数据收集表 三 sql语句: 1#没有使用索引的表统计 SELECT t.TAB ...

最新文章

  1. python多个线程join_python-使用`thread.join()`时多线程冻结
  2. html5学习笔记---03. Canvas简介,Canvas的使用方法
  3. 哪些异常是RuntimeException?Sql异常属于RuntimeException吗?Spring下SQL异常事务回滚
  4. android 新闻应用、Xposed模块、酷炫的加载动画、下载模块、九宫格控件等源码...
  5. 【学习 OpenCV】—— Mat setTo/convertTo/copyTo
  6. numpy-np.concatenate
  7. IPv6 SLAAC原理详解及配置
  8. 论文撰写-LaTex 教程+模板
  9. 微信小程序的页面布局(1)
  10. sql oracle 退格键,Oraclesqlplus中方向键、退格键的使用是怎样的? 爱问知识人
  11. 使注册用户名时不能包含特殊符号
  12. Flutter 仿滴滴出行App,2021最新华为Android校招面试题
  13. 好用的记事本陈列 tree/f
  14. mybatis中更新mysql时间多了一秒
  15. 趣学算法NYOJ加勒比海盗船
  16. osx 续航测试软件,续航测试:OS X 10.9让MacBook Air更坚挺
  17. 热像仪和夜视仪的区别
  18. 计算机视觉英语论文,计算机视觉导论论文中英双语版(10页)-原创力文档
  19. 锂电池净化厂房低湿车间装修SICOLAB
  20. 欧姆龙, PLC CJ2M标准程序,一共控制12个伺服电机 ,气缸若干,包含轴点动,回零,相对与绝对定位

热门文章

  1. 奸商如何修改电脑属性里显示的CPU型号和内存容量
  2. AutoMagic使用说明
  3. 小程序输入框字数统计
  4. python 画心_python画心性线
  5. 如何拆分含有多种分隔符的字符串
  6. 华测P550数据导入睿铂Skyscanner工作流程
  7. 对java的粗浅理解
  8. fabric1.4.3单机环境搭建教程(四)
  9. 服务器微信了早上好,微信早晨好问候语句动态图片 早上好发给朋友的微信早安问候语简短...
  10. oracle linux 5.8 更新,Oracle Linux迎来UEK R5U5企业内核更新