【Mysql】给查询记录增加序列号方法

在MySQL 8.0版本中,你可以使用ROW_NUMBER()函数来添加序号。以下是一个示例查询,演示如何添加序号:

sql 复制代码
SELECT 
    ROW_NUMBER() OVER (ORDER BY column_name) AS serial_number,
    column1, column2, ...
FROM
    your_table;

请将column_name替换为你想要按照哪一列排序的列名。还可以添加其他需要的列,以在结果中显示它们。

这个查询将返回一个名为serial_number的新列,其中包含每行的序号。序号是根据ORDER BY子句中指定的列进行排序的。

需要注意的是,ROW_NUMBER()函数是在MySQL 8.0版本中引入的。在MySQL 5.7版本中,该函数不可用。如果你使用的是MySQL 5.7版本,并且需要添加序号,你可以考虑其他方法,例如使用变量或自增列。以下是一个使用变量的示例查询:

sql 复制代码
SELECT 
    @row_number:=@row_number + 1 AS serial_number,
    column1, column2, ...
FROM
    your_table, (SELECT @row_number:=0) AS t
ORDER BY column_name;

在这个示例中,我们使用一个变量@row_number来追踪行号。通过将变量递增并与其他查询一起使用,你可以为每行添加一个序号。请记得将column_name替换为你想要按照哪一列排序的列名。

由于我安装的是MySQL 5.7版本的,下面用MySQL 5.7的演示一下:

查看版本号:

sql 复制代码
select version();

输出:

数据准备:

sql 复制代码
-- demo.schedule definition

CREATE TABLE `schedule` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `start_time` datetime NOT NULL,
  `end_time` datetime NOT NULL,
  `employee_id` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

插入数据:

sql 复制代码
INSERT INTO demo.schedule
(start_time, end_time, employee_id)
VALUES('2023-09-08 07:50:00', '2023-09-08 12:00:00', 1);
INSERT INTO demo.schedule
(start_time, end_time, employee_id)
VALUES('2023-09-08 12:40:00', '2023-09-08 17:20:00', 1);
INSERT INTO demo.schedule
(start_time, end_time, employee_id)
VALUES('2023-09-08 18:10:00', '2023-09-08 20:30:00', 1);

查询数据,给记录添加序列号:

sql 复制代码
SELECT 
    @row_number:=@row_number + 1 AS serial_number,
    s.*
FROM
    schedule s, (SELECT @row_number:=0) AS t
ORDER BY s.end_time ;

输出结果:

相关推荐
xixingzhe210 分钟前
数据库备份的分类与特点
数据库
时间的拾荒人4 小时前
Redis 主从复制详解:配置实操 + 原理机制
数据库·redis·面试
隔窗听雨眠4 小时前
MySQL三表JOIN执行内核与优化器决策机制
数据库·mysql·sql优化
Decay__5 小时前
SQLServer 索引与 SQL 优化 —— 聚集索引、非聚集索引、覆盖索引、碎片维护与执行计划
运维·数据库·sql·mysql·架构
笃行3506 小时前
【金仓数据库产品体验官】订单增量同步实战:MERGE、OUTPUT 与 IDENTITY 的兼容验证
数据库
星恒随风10 小时前
MySQL 从零入门(六):复合查询详解——多表查询、自连接、子查询与 UNION
linux·服务器·数据库·mysql
无奈笑天下11 小时前
银河麒麟上lsblk命令教程详解
linux·运维·服务器·数据库
xiaoye-duck12 小时前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型
AllData公司负责人13 小时前
AI大模型数据开发底座系列说明书:AllData集成DB-GPT开源项目建设 AI 多模态分析底座,涵盖模态解析/智能大屏/MCP 扩展!
大数据·数据库·人工智能·gpt·数据采集·数据接入·模态解析
隔窗听雨眠13 小时前
MySQL进程卡死的定位思路与恢复实践
mysql·故障排查·数据库运维