小白学习MySQL - 增量统计SQL的需求

Posted bisal(Chen Liu)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小白学习MySQL - 增量统计SQL的需求相关的知识,希望对你有一定的参考价值。

这篇文章在爱可生开源社区首发《技术分享 | 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的需求的主要内容,如果未能解决你的问题,请参考以下文章

小白学习MySQL - 增量统计SQL的需求 - 开窗函数的方案

小白学习MySQL - 增量统计SQL的需求 - 开窗函数的方案

使用SQL统计某个表每天的总量和增量 mysql数据库

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

大数据集群硬盘资源监控

小白学习MySQL - 统计的"投机取巧"