当前位置:首页 > 数码 > MySQL数据库生成分组排序的序号 (mysql数据类型)

MySQL数据库生成分组排序的序号 (mysql数据类型)

admin5个月前 (04-25)数码28

1. 数据准备

创建一个展示表 users : ```sql CREATE TABLE users( id INT PRIMARY KEY, group_id INT, c_name VARCHAR(64) ); ``` 插入展示数据: ```sql -- 插入 10 行数据 INSERT INTO users VALUES (1, 1, '张三'), (2, 1, '李四'), (3, 2, '王五'), (4, 2, '赵六'), (5, 3, '钱七'), (6, 1, '周八'), (7, 2, '吴九'), (8, 3, '郑十'), (9, 1, '孙十一'), (10, 3, '李十二'); ```

2. 生成序号

(1) 使用窗口函数 ROW_NUMBER() 实现

在 MySQL 8.0 中,可以使用窗口函数 ROW_NUMBER() 来生成序号: ```sql SELECT ROW_NUMBER() OVER (ORDER BY c_name) AS row_num, id, c_name FROM users; ``` 运行结果: ``` +---------+----+-----------+ | row_num | id | c_name | +---------+----+-----------+ | 1 | 7 | 吴九 | | 2 | 6 | 周八 | | 3 | 9 | 孙十一 | | 4 | 1 | 张三 | | 5 | 10 | 李十二 | | 6 | 2 | 李四 | | 7 | 3 |王五 | | 8 | 4 | 赵六 | | 9 | 8 | 郑十 | | 10 | 5 | 钱七 | +---------+----+-----------+ ```

(2) 低版本 MySQL 中的实现

由于在 MySQL 8.0 版本之前没有 MySQL数据库生成分组排序的序号 ROW_NUMBER() 窗口函数,因此需要使用变量来实现。具体示例如下: ```sql SET @row_num = 0; SELECT (@row_num := @row_num + 1) AS row_num, id, c_name FROM users ORDER BY c_name; ``` 运行结果: ``` +---------+----+-----------+ | row_num | id | c_name | +---------+----+-----------+ | 1 | 7 | 吴九 | | 2 | 6 | 周八 | | 3 | 9 | 孙十一 | | 4 | 1 | 张三 | | 5 | 10 | 李十二 | | 6 | 2 | 李四 | | 7 | 3 | 王五 | | 8 | 4 | 赵六 | | 9 | 8 | 郑十 | | 10 | 5 | 钱七 | +---------+----+-----------+ ``` 注意:每次执行前需要将 @row_num 重新设置为 0,即执行 SET @row_num = 0

3. 分组后排序

(1) 继续使用窗口函数 ROW_NUMBER() 实现

在 MySQL 8.0 中,可以继续使用窗口函数 ROW_NUMBER() 来实现分组排序的功能: ```sql SELECT id, group_id, c_name, ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY id) AS row_num FROM users ORDER BY group_id, id; ``` 运行结果: ``` +----+----------+-----------+---------+ | id | group_id | c_name | row_num | +----+----------+-----------+---------+ | 1 | 1 | 张三 | 1 | | 2 | 1 | 李四 | 2 | | 6 | 1 | 周八 | 3 | | 9 | 1 | 孙十一 | 4 | | 3 | 2 | 王五 | 1 | | 4 | 2 | 赵六 | 2 | | 7 | 2 | 吴九 | 3 | | 5 | 3 | 钱七 | 1 | | 8 | 3 | 郑十 | 2 | | 10 | 3 | 李十二 | 3 | +----+----------+-----------+---------+ ```

mysql5.7 mysql8窗口函数分组排序并在组内编号

表结构 ROW_NUMBER() OVER (PARTITION BY category ORDER BY id) AS idx 含义: 按 category 分组, 组内按 id 排序, 组内排序的序号(行号)作为列 idx ROW_NUMBER() 在 mysql8 才开始支持, 对于msqyl5.7或对应版本的MariaDB,相同功能的实现可以参考如下 sql 要点: 可以看到,两个结果,在分组变化的地方,idx开始了重新编号,且结果与 ROW_NUMBER() 一致.

用mysql查询后,怎样生成名次的顺序号

用mysql查询后,怎样生成名次的顺序号SELECT 语句中的 Order By 子句,决定返回记录集合的排序方式例如:按照【名次】值,从小到大排序Select * From 表名 Where By名次按照【名次】值,从大到小排序Select * From 表名 Where By名次 Desc

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: MySQL

“MySQL数据库生成分组排序的序号 (mysql数据类型)” 的相关文章

实用性极强的-MySQL-查询优化策略 (实用性极强的app)

实用性极强的-MySQL-查询优化策略 (实用性极强的app)

在程序上线运行一段时间后,一旦数据量上去了,或多或少会感觉到系统出现延迟、卡顿等现象,出现这种问题,就需要程序员或架构师进行系统调优工作了。其中,大量的实践经验表明,调优的手段尽管有很多,但涉及到...

MySQL-一探究竟-核心模块揭秘 (mysql-bin文件可以删除吗)

MySQL-一探究竟-核心模块揭秘 (mysql-bin文件可以删除吗)

Undo Segment Caching To improve the efficiency of undo segmentallocation, InnoDB caches some un...

优化数据统计的终极指南-MySQL-提升查询性能的秘诀 (优化数据统计工具)

优化数据统计的终极指南-MySQL-提升查询性能的秘诀 (优化数据统计工具)

在业务场景中,我们经常需要统计当前已有的业务数据,例如商品库内商品的数量、每天的用户订单数量等。此时,我们需要使用统计功能来实现。 count()实现方式 对于不同的数据库引擎,co...

实战-MySQL-数据库压力测试与性能评估方法-Java (实战篮球鞋排名)

实战-MySQL-数据库压力测试与性能评估方法-Java (实战篮球鞋排名)

压力测试的目的和重要性 压力测试是模拟真实环境中并发用户访问数据库的场景,通过增加负载来测试数据库系统的性能表现。压力测试的目的是发现数据库在高负载下的性能瓶颈、资源利用情况和响应时间等指...

全面指南-如何解决-MySQL-主从延时问题 (全面指导)

全面指南-如何解决-MySQL-主从延时问题 (全面指导)

一、什么是主从延时? 主从延时,是指从数据库从主数据库复制数据时产生的时间差。它会导致从库中的数据与主库不一致。 二、为什么会主从延时? 1. 主从复制原理 MySQL的...

核心模块-深入探索数据库引擎-MySQL-揭秘 (核心模块英文)

核心模块-深入探索数据库引擎-MySQL-揭秘 (核心模块英文)

简介 Savepoint 是 MySQL 中的一种机制,允许在事务中创建标记点,以便在事务失败时回滚到该标记点。Savepoint 的原理是将事务的当前状态存储在各种数据结构中,包括服务器层、b...

使用-数据库并自动发送备份文件到指定邮箱-K8s-定期备份-MySQL (使用数据库的命令)

使用-数据库并自动发送备份文件到指定邮箱-K8s-定期备份-MySQL (使用数据库的命令)

简介 本文档描述了一个使用脚本来监控服务器高占用率进程并通过电子邮件发送警报的项目。本文还探讨了使用相同机制备份数据库的可能性。 技术 Python psuti...

обеспечение-и-данных-MySQL锁机制-предотвращение-конфликтов-согласованности (翻译)

обеспечение-и-данных-MySQL锁机制-предотвращение-конфликтов-согласованности (翻译)

锁机制是一种通过对数据进行加锁来防止数据冲突和不一致的技术。MySQL 采用了两种类型的锁:共享锁和排他锁,以实现并发访问数据的同时保证数据的一致性。 共享锁 (SharedLock)...