MySql教程
MySql用户管理
MySQL数据库
MySql表格和视图
MySQL查询
MySQL索引
MySQL子句
MySQL授权
MySql控制流
MySQL条件
MySQL连接
MySQL键
MySQL触发器
MySQL聚合函数
MySQL常用
MySQL正则表达式
MySql差异性

MySQL ROW_NUMBER()

MySQL中的ROW_NUMBER()函数用于返回分区中每一行的 顺序号。它是一种窗口功能。行号从1开始到分区中存在的行数。
要注意的是,MySQL在8.0版之前不支持ROW_NUMBER()函数,但是它们提供了 session变量,使我们可以模拟此功能。
语法
以下是在 MySQL :
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()函数

使用会话变量的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;
在此语句中,我们首先指定由@prfix表示的会话变量 @row_number ,并将其值设置为0。然后,从表Person中选择数据,并为变量@row_number每行加一位。
成功执行查询后,我们将得到如下输出:
MySQL ROW_NUMBER()Function
同样,我们将使用会话变量作为表,并使用以下语句将其与源表交叉连接:
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
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4