語法: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
idname
subject
grade1小a
數學902小a
英語883小a
語文791小b
數學992小b
英語823小b
語文761小c
英語812小c
數學783小c
語文671小d
數學932小d
英語843小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
row number over 分析函式
今天用到了row number over 現在就以知識點的形式總結一下,以便於以後的回顧。參考資料msdn 語法 row number over partition by value expression n order by clause 通過語法可以看出 over裡有兩個引數,partition...
row number over 分析函式
今天用到了row number over 現在就以知識點的形式總結一下,以便於以後的回顧。參考資料msdn 語法 row number over partition by value expression n order by clause 通過語法可以看出 over裡有兩個引數,partition...
ROW NUMBER OVER 函式用法詳解
語法格式 row number over partition by 分組列 order by 排序列 desc row number over 分組排序功能 在使用 row number over 函式時候,over 裡頭的分組以及排序的執行晚於 where group by order by 的執...