ROW_NUMBER函数的用法与实例
什么是ROW_NUMBER函数
ROW_NUMBER函数是一种Windows函数,用于为结果集中的每个行分配连续的排名值。该函数在SQL Server,Oracle和PostgreSQL等数据库管理系统中均可用。
ROW_NUMBER函数的语法及参数
ROW_NUMBER函数的基本语法如下:
ROW_NUMBER() OVER (ORDER BY column_name ASC/DESC)
其中,ORDER BY子句指定按哪个列排序,ASC表示升序排列,DESC表示降序排列。
ROW_NUMBER函数没有参数。
ROW_NUMBER函数的实例
实例1:为查询结果设置行号
SELECT ROW_NUMBER() OVER (ORDER BY SalesAmount DESC) AS 'Rank',
FirstName, LastName, SalesAmount
FROM SalesPerson
该例子使用ROW_NUMBER函数为SalesPerson表的查询结果中的每一行添加一个行号。查询结果按销售额(SalesAmount)降序排列。结果如下:
Rank | FirstName | LastName | SalesAmount |
---|---|---|---|
1 | John | Doe | 5000 |
2 | Jane | Smith | 4000 |
3 | Tom | Lee | 3500 |
4 | David | Kim | 2000 |
5 | Amy | Chen | 1500 |
实例2:按照分组设置行号
SELECT FirstName, LastName, SalesAmount,
ROW_NUMBER() OVER (PARTITION BY Department ORDER BY SalesAmount DESC) AS 'Rank'
FROM SalesPerson
该例子使用ROW_NUMBER函数,并按Departnment分组,每个分组中按照销售额降序排列。结果如下:
FirstName | LastName | SalesAmount | Rank |
---|---|---|---|
John | Doe | 3000 | 1 |
Jane | Smith | 2500 | 2 |
Tom | Lee | 1500 | 3 |
David | Kim | 2000 | 1 |
Amy | Chen | 500 | 2 |
实例3:分组后设置行号和排名相同
SELECT FirstName, LastName, SalesAmount,
DENSE_RANK() OVER (PARTITION BY Department ORDER BY SalesAmount DESC) AS 'Rank'
FROM SalesPerson
该例子使用DENSE_RANK()函数,并按照Departnment分组,每个分组中按照销售额降序排列。结果如下:
FirstName | LastName | SalesAmount | Rank |
---|---|---|---|
John | Doe | 3000 | 1 |
Jane | Smith | 2500 | 2 |
Tom | Lee | 1500 | 3 |
David | Kim | 2000 | 1 |
Amy | Chen | 500 | 2 |
以上就是ROW_NUMBER函数的用法及实例。ROW_NUMBER函数在分析和排序数据时非常有用,特别是在需要对查询结果进行行号分配的场合,可以使用该函数代替传统的循环算法简化查询。