MySQL ROW_NUMBER 函数

MySQL ROW_NUMBER 函数

MySQL中的ROW_NUMBER()函数用于为每个分区内的每一行返回连续的编号。它是一种窗口函数。行编号从1开始,直到分区中存在的行数。

需要注意的是,在版本8.0之前,MySQL不支持ROW_NUMBER()函数,但他们提供了一个会话变量,可以用来模拟这个函数。

语法

以下是在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 函数

现在,我们可以使用ROW_NUMBER()函数来为每个记录分配一个序列号,使用以下语句:

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

它将给出以下输出:

MySQL ROW_NUMBER 函数

再次,我们可以使用ROW_NUMBER()函数来为每个分区内的每条记录分配一个序号,使用下述语句:

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

将根据年份(2015年和2016年)找到的两个分区打印如下。

MySQL ROW_NUMBER 函数

MySQL 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;

在这个语句中,我们首先指定了会话变量 @row_number ,由@prefix指示,并将其值设置为0。然后,我们从Person表中选择数据,并逐行将变量@row_number的值增加一。

成功执行查询后,我们将得到以下输出结果:

MySQL ROW_NUMBER 函数

再次,我们将使用一个会话变量作为表,并使用以下语句将其与源表进行交叉连接:

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 函数

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程