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

但是他的需求是能按照 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 逻辑上,另一方面则要了解所用数据库支持的函数、功能、特性等,是否有能契合到这个需求的实现,除此之外,非功能的因素,也是不可忽视的,合适的索引、避免重复读数据、避免不必要的排序等都是我们可以利用的手段。
本文关键字:#SQL 需求# #聚类增量统计#
关于SQLE
爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。
| 类型 | 地址 |
|---|---|
| 版本库 | https://github.com/actiontech/sqle |
| 文档 | https://actiontech.github.io/sqle-docs-cn/ |
| 发布信息 | https://github.com/actiontech/sqle/releases |
| 数据审核插件开发文档 | https://actiontech.github.io/sqle-docs-cn/3.modules/3.7_auditplugin/auditplugin_development.html |
更多关于 SQLE 的信息和交流,请加入官方QQ交流群:637150065...





