sql中"row_number()over"是什么意思?

发布网友 发布时间:2022-04-23 02:41

我来回答

2个回答

懂视网 时间:2022-05-03 21:03

从SQL Server 2005开始,增加了一个新的函数Row_Number(),他的一个很伟大的作用就是可以在数据表中添加一列从1开始的行号,这样大大代替所有多余的代码来产生行号。下面就教大家如何使用Row_Number()函数。

    假设数据库中有如下表:

代码如下:
id    name
1    aa
3    bb
4    cc

    执行如下SQL语句后将得到如下结果:

SELECT ROW_NUMBER() OVER(ORDER BY id) as rowNum,* FROM 表名称

代码如下:
rowNum    id    name
1                 1    aa
2                 3    bb
3                 4    cc

热心网友 时间:2022-05-03 18:11

语法:ROW_NUMBER()
OVER(PARTITION
BY
COLUMN
ORDER
BY
COLUMN)
简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER()
OVER
(ORDER
BY
xlh
DESC)
是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号。
示例:
xlh
row_num
1700
1
1500
2
1085
3
710
4
row_number()
OVER
(PARTITION
BY
COL1
ORDER
BY
COL2)
表示根据COL1分组,在分组内部根据
COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
实例:
初始化数据
create
table
employee
(empid
int
,deptid
int
,salary
decimal(10,2))
insert
into
employee
values(1,10,5500.00)
insert
into
employee
values(2,10,4500.00)
insert
into
employee
values(3,20,1900.00)
insert
into
employee
values(4,20,4800.00)
insert
into
employee
values(5,40,6500.00)
insert
into
employee
values(6,40,14500.00)
insert
into
employee
values(7,40,44500.00)
insert
into
employee
values(8,50,6500.00)
insert
into
employee
values(9,50,7500.00)
数据显示为
empid
deptid
salary
-----------
-----------
---------------------------------------
1
10
5500.00
2
10
4500.00
3
20
1900.00
4
20
4800.00
5
40
6500.00
6
40
14500.00
7
40
44500.00
8
50
6500.00
9
50
7500.00
需求:根据部门分组,显示每个部门的工资等级
预期结果:
empid
deptid
salary
rank
-----------
-----------
---------------------------------------
--------------------
1
10
5500.00
1
2
10
4500.00
2
4
20
4800.00
1
3
20
1900.00
2
7
40
44500.00
1
6
40
14500.00
2
5
40
6500.00
3
9
50
7500.00
1
8
50
6500.00
2
SQL脚本:
SELECT
*,
Row_Number()
OVER
(partition
by
deptid
ORDER
BY
salary
desc)
rank
FROM
employee

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com