MySQL - ROW_NUMBER函数

MySQL - ROW_NUMBER函数 首页 / MySQL入门教程 / MySQL - ROW_NUMBER函数

MySQL中的ROW_NUMBER()函数用于返回分区中每一行的顺序号。它是一种窗口函数。行号从1开始到分区中存在的行数。

请注意,MySQL在8.0版之前不支持ROW_NUMBER()函数,但是它们提供了 session变量,该变量允许无涯教程模拟此函数。

以下是在 MySQL 中使用ROW_NUMBER()的基本语法:

ROW_NUMBER() OVER (<partition_definition> <order_definition>)

通过示例进行演示

首先,将使用以下语句创建一个名为"Person"的表:

CREATE TABLE Person (
  Name varchar(45) NOT NULL,
  Product varchar(45) DEFAULT NULL,
  Country varchar(25) DEFAULT NULL,
  Year int NOT NULL
);

接下来,需要向该表中添加值。执行以下语句:

INSERT INTO Person(Name, Product, Country, Year) 
VALUES ('Stephen', 'Computer', 'USA', 2015), 
('Joseph', 'Laptop', 'India', 2016), 
('John', 'TV', 'USA', 2016),
('Donald', 'Laptop', 'England', 2015),
('Joseph', 'Mobile', 'India', 2015),
('Peter', 'Mouse', 'England', 2016);

接下来,执行SELECT语句以显示记录:

mysql> SELECT * FROM Person;

将获得输出,如下所示:

MySQL ROW_NUMBER() Function

现在,无涯教程可以使用ROW_NUMBER()函数通过以下语句为每条记录分配一个序列号:

SELECT *, 
	ROW_NUMBER() OVER(PARTITION BY Year) AS row_num
FROM Person;

它将给出以下输出:

MySQL ROW_NUMBER() Function

同样,也可以使用ROW_NUMBER()函数使用以下语句为分区中的每个记录分配序列号:

SELECT *, 
	ROW_NUMBER() OVER(PARTITION BY Year) AS row_num
FROM Person;

它将给出以下输出,其中基于年份(2015和2016)找到了两个分区。

MySQL ROW_NUMBER() Function

ROW_NUMBER()使用会话变量

无涯教程可以模拟ROW_NUMBER()函数,以使用会话变量按递增顺序添加行号。

执行以下语句,为每行添加行号,从1开始:

SET @row_number = 0; 

SELECT Name, Product, Year, Country,
	(@row_number:=@row_number + 1) AS row_num
FROM Person ORDER BY Country;

在此语句中,首先指定由@prfix表示的会话变量 @row_number 并将其值设置为0。然后,从表Person中选择数据,并将变量@row_number的值增加每一排。

成功执行查询后,将获得以下输出:

无涯教程网

MySQL ROW_NUMBER() Function

同样,将使用会话变量作为表,并使用以下语句将其与源表交叉连接:

链接:https://www.learnfk.comhttps://www.learnfk.com/mysql/mysql-row-number-function.html

来源:LearnFk无涯教程网

SELECT (@row_number:=@row_number + 1) AS row_num, Name, Country, Year
FROM Person, (SELECT @row_number:=0) AS temp ORDER BY Year;

无涯教程将得到如下输出:

MySQL ROW_NUMBER() Function

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

技术与商业案例解读 -〔徐飞〕

深入剖析Kubernetes -〔张磊〕

算法面试通关40讲 -〔覃超〕

SQL必知必会 -〔陈旸〕

Flutter核心技术与实战 -〔陈航〕

图解 Google V8 -〔李兵〕

如何看懂一幅画 -〔罗桂霞〕

PPT设计进阶 · 从基础操作到高级创意 -〔李金宝(Bobbie)〕

徐昊 · AI 时代的软件工程 -〔徐昊〕

好记忆不如烂笔头。留下您的足迹吧 :)