row number over 分析函式

2022-04-25 06:45:08 字數 3284 閱讀 9590

今天用到了row_number()over(),現在就以知識點的形式總結一下,以便於以後的回顧。

-------------------參考資料msdn-------------------

語法:

row_number ( ) 

over ( [ partition by value_expression , ... [ n ] ] order_by_clause )

通過語法可以看出 over裡有兩個引數, partition by 和 order by ,其中partition by是可以不寫的,但是order by是必須有的。可能對order by 比較熟悉(就是按什麼排序),但partition by是什麼意思呢?partition的中文解釋是:n. 劃分,分開;[數] 分割;隔牆;隔離物 vt. [數] 分割;分隔;區分。讓我們再結合下面的引數說明和例項很容易就理解它的含義了。引數:partition by value_expression

如果未指定 partition by,則此函式將查詢結果集的 所有行視為單個組。over clause (transact-sql).'>

order_by_clause

order by 子句可確定在特定分割槽中為行分配唯一 row_number 的順序。over clause (transact-sql).'>

返回值型別:

bigint(長整型)
以上是對row_number()over()的理論了解,現在開始用例子演示:先建表(dbo.peopleinfo):

create table [dbo].[peopleinfo](

[id] [int] identity(1,1) not null,

[name] [nchar](10) collate chinese_prc_ci_as null,

[gender] [nchar](10) collate chinese_prc_ci_as null,

[numb] [nchar](10) collate chinese_prc_ci_as null,

[phone] [nchar](10) collate chinese_prc_ci_as null,

[fenshu] [int] null

) on [primary]

向表中插入資料:

insert into peopleinfo([name],gender,numb,phone,fenshu) values ('李歡','男','3223','1365255',80)

insert into peopleinfo([name],gender,numb,phone,fenshu) values ('李歡','男','322123','1',90)

insert into peopleinfo([name],gender,numb,phone,fenshu) values ('李名','男','3213112352','13152',56)

insert into peopleinfo([name],gender,numb,phone,fenshu) values ('李名','女','32132312','13342563',60)

insert into peopleinfo([name],gender,numb,phone,fenshu) values ('王華','女','3223','1365255',80)

查詢出所有插入的資料:

select * from  dbo.peopleinfo
結果如圖:

例子:只用order by 不用 partition by 的sql語句如下:

--不用partition by

select [name],gender,fenshu, row_number() over(order by fenshu desc) as num from dbo.peopleinfo

結果如圖:

例子:用order by 也用 partition by 的sql語句如下:

select [name],gender,fenshu, row_number() over(partition by gender order by fenshu desc) as num from dbo.peopleinfo
結果如圖:

比較例子一和例子二的結果圖很容易就明白partition by的用處了,以例子二為例就是先用partition by把性別【gender】分成兩個區乙個男乙個女,然後再用order by 把每個區里的分數【fenshu】從大到小排序。

練習題(用到了前面所講的cte(with。。。as)知識點可以看看):

--查詢出不同性別中分數最高的學生

with temp as

(select [name],gender,fenshu, row_number() over(partition by gender order by fenshu desc) as num from dbo.peopleinfo

)select * from temp where num = 1

結果如圖:

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 column order by column partition by 相當於資料庫中的group by 說明 row number over partition by col1 order by col2 表示根據col1分組,在分組...

row number over使用方法

用示例說明 row number over partition by column1 order by column2 的使用方法 1 執行前資料庫表內容 序號組名稱 組成員名稱 1305 xl大專 1306 xl本科 1307 xl研究生及以上 1308 xl其它 1309 xl中專 1310 x...