码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 小白学习MySQL - 增量统计SQL的需求


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

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

    f0e6bd0d49e74bf0b51cc3af6698e4d9.png

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

    3d3fe01381393e10c7508d953d16c479.png

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

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

    37fa746b36e72dfcffcb8570309c60ad.png

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

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

    ae051262eea83551ef8e87b67385fa77.png

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

    f389fc445ebc7f8c14429acdc707765d.png

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

    当然,以上的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篇文章分类和索引》

  • 相关阅读:
    「C++程序设计 (面向对象进阶)」学习笔记・二
    java 多线程()—— 线程同步=队列+锁
    等保备案主体是谁?在当地网安进行备案是吗?
    PY32F002B从压缩包到实现串口printf输出
    .NET MVC第二章、控制器使用
    移动端页面秒开优化总结
    PHP操作MongoDB的原生CURD方法
    数据库原理与应用——引言(二)
    单元测试实施最佳方案(背景、实施、覆盖率统计)
    Allegro PCB设置高亮某个网络,提高对比度
  • 原文地址:https://blog.csdn.net/bisal/article/details/125437314
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号