首页 > 数据库 >MySQL 分组累加Demo

MySQL 分组累加Demo

时间:2023-01-31 13:16:27浏览次数:43  
标签:code group demo sum MySQL number 累加 VALUES Demo

题目

累计并输出number的值,按照code分组,id排序,数据和期待结果如下:

方式1:单独累计

每一行单独计算截止到当前行,相同分组条件的number累加并输出,适用于任意版本的mysql,缺点是效率低,sql语句如下:

SELECT id, `code`, number,
	( SELECT SUM( number ) FROM demo_group_sum WHERE `code` = A.`code` AND id <= A.Id ) sumNumber 
FROM demo_group_sum A 
ORDER BY A.id;

方式2:sum() over(partition)

借助mysql聚合函数,要求mysql 版本不低于v8.0,查询当前sql版本号:select VERSION(); sql语句如下:

select id,code,number,
sum(number) over(partition by `code` order by id) sumNumber
FROM demo_group_sum;

语法结构:sum(累加值字段) over(partition by 分组字段 order by 排序字段)

注意:

  • sum、over关键字和后边的左括号之间不能有空格。

  • over() 里如果不跟order by 字段,只会简单的把同分组的值加起来,效果类似sum(number) group by code,结果如下:

附录:建表及测试数据脚本

DROP TABLE IF EXISTS `demo_group_sum`;
CREATE TABLE `demo_group_sum` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` char(2) DEFAULT NULL,
  `number` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

INSERT INTO `demo_group_sum` VALUES (1, 'A', 1);
INSERT INTO `demo_group_sum` VALUES (2, 'A', 3);
INSERT INTO `demo_group_sum` VALUES (3, 'B', 2);
INSERT INTO `demo_group_sum` VALUES (4, 'B', 2);
INSERT INTO `demo_group_sum` VALUES (5, 'B', 3);
INSERT INTO `demo_group_sum` VALUES (6, 'C', 1);
INSERT INTO `demo_group_sum` VALUES (7, 'D', 5);
COMMIT;

标签:code,group,demo,sum,MySQL,number,累加,VALUES,Demo
From: https://www.cnblogs.com/joe-/p/17078629.html

相关文章

  • Linux——MySQL主从复制读写分离
     主从复制用来保证数据的一致性和完整性 主从复制原理:主MySQL需要开启二进制日志保存用户对Mysql数据的操作。   从数据库监听主MySQL日志变化,发现更新复制日志......
  • 前端VUE+后端springboot实现导入返回excel校验结果demo
    vue代码<!--菜单导入对话框--><el-dialog:title="upload.title":visible.sync="upload.open":close-on-click-modal="false"width="400px"append-to-body>......
  • docker-mysql cmd
    version:'3'services:db:#构建mysql镜像image:mysqlnetworks:network1:ipv4_address:172.16.238.10ip......
  • mybatis和mysql依赖
    <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><dependency><group......
  • MySql 自动设置时间(自动获取时间,填充时间)
    应用场景:1、在数据表中,要记录每条数据是什么时候创建的,不需要应用程序去特意记录,而由数据数据库获取当前时间自动记录创建时间;2、在数据库中,要记录每条数据是什么时候修......
  • 关于Mysql中列的别名只能在order by中使用的问题
    描述:在给列起过别名之后,使用别名去过滤内容是会出错的问题:报错信息:原因:语句执行顺序问题1.先执行from语句找到具体的表2.在执行where语句根据筛选过滤内......
  • mysql行列互转
    1.构造常量表SELECT'优'aslabel,'A'as`value`UNIONALLSELECT'中'aslabel,'B'as`value`UNIONALLSELECT'良'aslabel,'C'as`value`UNIONALLSELEC......
  • mysql02
    mysqlday02课堂笔记1、把查询结果去除重复记录【distinct】 注意:原表数据不会被修改,只是查询结果去重。 去重需要使用一个关键字:distinct mysql>selectdistinctjobf......
  • mysql02
    mysqlday01课堂笔记1、什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么?数据库: 英文单词DataBase,简称DB。按照一定格式存储数据的一些文件的组合。 ......
  • 在linux下安装mysql8.0.22
    前提准备第一步:检查是否有安装过mysql命令:# rpm -qa|grep-Imysql,使用rpm方式进行验证,其中i表示忽略大小写 假如安装过了mysql则需要先卸载命令:# rpm -e--no......