当前位置:网站首页>小白学习MySQL - 增量统计SQL的需求
小白学习MySQL - 增量统计SQL的需求
2022-06-24 07:40:00 【bisal(Chen Liu)】
这篇文章在爱可生开源社区首发《技术分享 | 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 - varchar类型字段为什么经常定义成255?》
《小白学习MySQL - TIMESTAMP类型字段非空和默认值属性的影响》
《小白学习MySQL - InnoDB支持optimize table?》
《小白学习MySQL - table_open_cache的作用》
《小白学习MySQL - only_full_group_by的校验规则》
《小白学习MySQL - max_allowed_packet》
《小白学习MySQL - mysqldump保证数据一致性的参数差异》
《小白学习MySQL - MySQL会不会受到“高水位”的影响?》
近期更新的文章:
《充电宝的玄机》
文章分类和索引:
边栏推荐
- [noi simulation] pendulum (linear algebra, Du Jiao sieve)
- tcpdump抓包实现过程
- 十二、所有功能实现效果演示
- uniapp 开发多端项目如何配置环境变量以及区分环境打包
- leetcode——错误的集合
- How to import MDF and LDF files into MySQL workbench
- 216. combined summation III enumeration method
- Transplantation of xuantie e906 -- fanwai 0: Construction of xuantie c906 simulation environment
- 1528. 重新排列字符串
- Floating error waiting for changelog lock
猜你喜欢
![[redis realize Secondary killing Business ①] Overview of Secondary killing Process | Basic Business Realization](/img/a3/9a50e83ece43904a3a622dcdb05b3c.png)
[redis realize Secondary killing Business ①] Overview of Secondary killing Process | Basic Business Realization

4274. suffix expression

【LeetCode】541. 反转字符串 II
![[Niuke] length of the last word of HJ1 string](/img/8b/6ba6506415b8112aea957ac5647121.png)
[Niuke] length of the last word of HJ1 string

Prompt code when MySQL inserts Chinese data due to character set problems: 1366

解决:jmeter5.5在win11下界面上的字特别小

From the Huawei weautomate digital robot forum, we can see the "new wisdom of government affairs" in the field of government and enterprises

2022-06-23:给定一个非负数组,任意选择数字,使累加和最大且为7的倍数,返回最大累加和。 n比较大,10的5次方。 来自美团。3.26笔试。
![[noi Simulation Competition] geiguo and time chicken (structure)](/img/4c/ed1b5bc2bed653c49b8b7922ce1674.png)
[noi Simulation Competition] geiguo and time chicken (structure)

leetcode——错误的集合
随机推荐
2022-06-23: given a nonnegative array, select any number to make the maximum cumulative sum a multiple of 7, and return the maximum cumulative sum. N is larger, to the 5th power of 10. From meituan. 3
Threejs glow channel 01 (unrealbroompass & layers)
Fast and slow pointer series
Opencv maximum filtering (not limited to images)
What is graph neural network? Figure what is the use of neural networks?
【牛客】HJ1 字符串最后一个单词的长度
用VNC Viewer的方式远程连接无需显示屏的树莓派
数云发布2022美妆行业全域消费者数字化经营白皮书:全域增长破解营销难题
[pytoch basic tutorial 31] youtubednn model analysis
解决:模型训练时loss出现nan
520. 检测大写字母
MySQL | 视图《康师傅MySQL从入门到高级》笔记
2022-06-23:给定一个非负数组,任意选择数字,使累加和最大且为7的倍数,返回最大累加和。 n比较大,10的5次方。 来自美团。3.26笔试。
陆奇:我现在最看好这四大技术趋势
Solution: the word of jmeter5.5 on the win11 lower interface is very small
Leetcode -- wrong set
1528. 重新排列字符串
Analyze the meaning of Internet advertising terms CPM, CPC, CPA, CPS, CPL and CPR
阿里资深软件测试工程师推荐测试人员必学——安全测试入门介绍
MySQL——SQL语句