ROW_NUMBER() OVER函数运用

语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

PARTITION BY:相当于数据库中的group by

说明:row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值表示每组排序后的顺序编号(从1开始,组内连续的唯一的编号)

--新建表Table_A

create table Table_A(name varchar(8),Subject varchar(8),Grade int)
insert into Table_A values(‘小A‘,‘数学‘,90)
insert into Table_A values(‘小A‘,‘语文‘,79)
insert into Table_A values(‘小A‘,‘英语‘,88)
insert into Table_A values(‘小B‘,‘数学‘,99)
insert into Table_A values(‘小B‘,‘语文‘,76)
insert into Table_A values(‘小B‘,‘英语‘,82)
insert into Table_A values(‘小C‘,‘数学‘,78)
insert into Table_A values(‘小C‘,‘语文‘,67)
insert into Table_A values(‘小C‘,‘英语‘,81)
insert into Table_A values(‘小D‘,‘数学‘,93)
insert into Table_A values(‘小D‘,‘语文‘,75)
insert into Table_A values(‘小D‘,‘英语‘,84)

--原始表

select * from Table_A

name Subject Grade
小A 数学 90
小A 语文 79
小A 英语 88
小B 数学 99
小B 语文 76
小B 英语 82
小C 数学 78
小C 语文 67
小C 英语 81
小D 数学 93
小D 语文 75
小D 英语 84

--执行以下语句后

select ROW_NUMBER() OVER(PARTITION BY name order by Grade desc) as id,name,Subject,Grade from Table_A

id name Subject Grade
1 小A 数学 90
2 小A 英语 88
3 小A 语文 79
1 小B 数学 99
2 小B 英语 82
3 小B 语文 76
1 小C 英语 81
2 小C 数学 78
3 小C 语文 67
1 小D 数学 93
2 小D 英语 84
3 小D 语文 75

--根据字段name分组,Grade排序

--提取成绩中的最大值,可用以下语句

select * from
(
    select ROW_NUMBER() OVER(PARTITION BY name order by Grade desc) as id,name,Subject,Grade from Table_A
)TT where id = 1

--每名学生,只显示前2单成绩,修改代码为以下即可

select * from
(
    select ROW_NUMBER() OVER(PARTITION BY name order by Grade desc) as id,name,Subject,Grade from Table_A
)TT where id between 1 and 2

时间: 2024-08-31 18:25:31

ROW_NUMBER() OVER函数运用的相关文章

ROW_NUMBER() OVER函数的基本用法,也可用于去除重复行

语法: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             

ROW_NUMBER() OVER()函数用法;(分组,排序),partition by

1.row_number() over()排序功能: (1) row_number() over()分组排序功能: 在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where group by  order by 的执行. partition by 用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,而聚合函数一般只有一个反映统计值的记录. 例如:employee,根据部门分组排

DB2中的ROW_NUMBER() OVER()函数用法

1.row_number() over()排序功能: (1) row_number() over()分组排序功能: 在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where group by  order by 的执行. partition by 用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,而聚合函数一般只有一个反映统计值的记录. 例如:employee,根据部门分组排

[数据库]ROW_NUMBER() OVER函数的基本用法

(1)ROW_NUMBER() OVER(ORDER BY COLUMN) 通常,开发者和管理员在一个查询里,用临时表和列相关的子查询来计算产生行号.现在SQL Server 2005提供了一个函数,代替所有多余的代码来产生行号. 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把CourseID列降序,再为降序以后的没条xlh记录返回一个序号. select ROW_NUMBER()

SQL2005中row_number()等函数的用法

SQL2005中row_number()等函数的用法 今天刚装了SQL Server 2005,感觉还行,2005比2000新增了几个函数,分别是row_number().rank().dense_rank().ntile(),下面以实例分别简单讲解一下. create table gg(sname varchar(10),sort varchar(10),num int) go insert into gg select '白芍','根茎类',55 union all select '法半夏'

row_number() over(...)函数

row_number() over(...)简直就是个吊炸天的函数. 之前用group by分组时select的字段除了group by字段外,其他字段都要用聚合函数包起来(如果有的话),如count(1),sum(amount),max(created_date),这样对其他非分组字段的处理只能满足一些常规的需求,如分组查询created_date最大的那条记录 以平安寿险红包项目举例 需求一:查询投保表中每个子红包最近一次的投保失败记录 需求二:查询投保表中每个子红包最近两次的投保失败记录

SQL ROW_NUMBER() OVER函数的基本用法用法

语法: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             

ROW_NUMBER() OVER函数的基本用法

语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 方法/步骤 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号. row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序

ROW_NUMBER() OVER函数的用法

语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) partition 划分,分割 --ROW_NUMBER() 就是生成一个有顺序的行号,而他生成顺序的标准,就是后面紧跟的OVER(ORDER BY ID) --还必须添加OVER语句以便告诉SQL Server你希望怎样添加行序号. 实例:初始化数据 create table school (id int,class varchar2(12),score decimal(10,2

ROW_NUMBER() OVER函数的基本用法用法

语法: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