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

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

admin9个月前 (04-25)数码43

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-一探究竟-核心模块揭秘 (mysql-bin文件可以删除吗)

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

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

主从复制原理简介-MySQL (主从复制原理mysql)

主从复制原理简介-MySQL (主从复制原理mysql)

主从复制(Master-SlaveReplication)是一种数据复制技术,用于在多个数据库主机之间的数据同步。在主从复制架构中,一个主机被设置为主主机(Master),充任数据源,其余主机被设...

如何在MySQL中成功数据的版本治理和回滚操作 (如何在mysql数据库中添加数据)

如何在MySQL中成功数据的版本治理和回滚操作 (如何在mysql数据库中添加数据)

成功数据的版本治理和回滚操作在中可以经过以下几种模式成功,包含经常使用事务、备份恢复、日志和版本控制工具等。上方将详细引见这些方法。 1.经常使用事务: MySQL允许事务操作,可以经...

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

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

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

MySQL-实现非中断亿级数据处理的秘密 (mysql-bin文件可以删除吗)

MySQL-实现非中断亿级数据处理的秘密 (mysql-bin文件可以删除吗)

MySQL 在海量数据管理方面表现得非常出色,能够存储上亿级别的数据,同时还具有极高的数据可靠性,几乎不会发生数据丢失的情况。这一强大的特性离不开 MySQL 的两大日志系统:binlog 和 r...

揭秘MySQL中Varchar和Int的隐式转换 (揭秘国安部点名的间谍机构)

揭秘MySQL中Varchar和Int的隐式转换 (揭秘国安部点名的间谍机构)

前言 在一次例行测试中,我们遇到了一个奇特的现象。一条查询库存数量的SQL语句,居然返回了0条记录。当我们手工执行SQL时,却查询到了一条记录。调查发现,原因在于MySQL的优化器在判断数据类型...

揭开其背后的神奇世界-深入探寻-索引的底层逻辑-MySQL (揭开其背后的真相)

揭开其背后的神奇世界-深入探寻-索引的底层逻辑-MySQL (揭开其背后的真相)

什么是索引? 索引是数据库系统中一种特殊的数据结构,用于快速查找数据。索引以某种方式引用(指向)数据,允许在索引上实现高级查找算法,从而提高查询速度。 索引的种类 最常见的索引类型有:...

运行系统 (列车自动运行系统)

运行系统 (列车自动运行系统)

作者:徐良,现任中国移动智慧家庭经营中心数据库初级经理,多年数据库运维优化阅历,历任华为、一线互联网公司初级DBA。目前关键担任中移智家基于规模的价值经营场景下数据库稳固性、容灾优化、他乡多活等相...