Row_number()函數(shù)用法小結(jié)
Row_number()函數(shù)是SQL SERVER系統(tǒng)函數(shù)中的一種,它為結(jié)果集的分區(qū)中的每一行分配一個(gè)連續(xù)的整數(shù)。簡(jiǎn)單的說(shuō)就是生成一個(gè)獨(dú)表,序號(hào)以每個(gè)分區(qū)的第一行開(kāi)頭,下面是其基本語(yǔ)法:

- PARTITION BY子句將結(jié)果集劃分為分區(qū)。 ROW_NUMBER()函數(shù)分別應(yīng)用于每個(gè)分區(qū),并重新初始化每個(gè)分區(qū)的行號(hào)。PARTITION BY子句是可選的。如果未指定,ROW_NUMBER()函數(shù)會(huì)將整個(gè)結(jié)果集視為單個(gè)分區(qū)。
- ORDER BY子句定義結(jié)果集的每個(gè)分區(qū)中的行的邏輯順序。 ORDER BY子句是必需的,因?yàn)镽OW_NUMBER()函數(shù)對(duì)順序敏感。
- OVER()是一個(gè)開(kāi)窗函數(shù),對(duì)集合進(jìn)行聚合計(jì)算
舉個(gè)例子,用row_number()函數(shù)對(duì)以下數(shù)據(jù)表單進(jìn)行課程,分?jǐn)?shù)高低及學(xué)號(hào)排序

sno為學(xué)號(hào),cno為所學(xué)課程,score為成績(jī)
得到以下語(yǔ)法和查詢(xún)結(jié)果:

可以看到ID的值以cno為分區(qū)進(jìn)行排序,當(dāng)cno變化時(shí)ID也會(huì)自動(dòng)重新開(kāi)始計(jì)數(shù),然后再將成績(jī)以降序排列,這樣每科成績(jī)高低及其對(duì)應(yīng)的學(xué)號(hào)就一目了然。
如果沒(méi)有partition by則row_number()將整個(gè)結(jié)果集視為一個(gè)分區(qū):

ID的值將一直排到最后。
當(dāng)row_number()與where一起使用時(shí),可以將row_number()封裝成一個(gè)子查詢(xún),如下只看每科前兩名的數(shù)據(jù):

將整個(gè)函數(shù)方法封裝命名為a,再?gòu)腶里面提取需要的條件。
在這里我還要補(bǔ)充一下row_number()函數(shù)以外的一個(gè)rank()和dense_rank()函數(shù),有時(shí)候如果第一名有兩個(gè)以上的同學(xué)時(shí),row_number()函數(shù)只會(huì)顯示一個(gè),而用rank()和dense_rank()則可以全部顯示出來(lái)(這兩個(gè)的區(qū)別是前者會(huì)跳躍排序,后者不會(huì)),如圖:

到此這篇關(guān)于Row_number()函數(shù)用法小結(jié)的文章就介紹到這了,更多相關(guān)Row_number()用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用row_number()實(shí)現(xiàn)分頁(yè)實(shí)例
- oracle中rownum和row_number()
- 利用ROW_NUMBER() OVER函數(shù)給SQL數(shù)據(jù)庫(kù)中每一條記錄分配行號(hào)的方法
- Mysql row number()排序函數(shù)的用法和注意
- SQL中distinct 和 row_number() over() 的區(qū)別及用法
- MYSQL row_number()與over()函數(shù)用法詳解
- SQL使用ROW_NUMBER() OVER函數(shù)生成序列號(hào)
- MySQL中rank() over、dense_rank() over、row_number() over用法介紹
- SQL中row_number()?over(partition?by)的用法說(shuō)明
- 數(shù)據(jù)庫(kù)中row_number()?分組排序函數(shù)的具體使用
相關(guān)文章
sql存儲(chǔ)過(guò)程幾個(gè)簡(jiǎn)單例子
存儲(chǔ)過(guò)程是一組為了完成特定功能的SQL語(yǔ)句集,是利用SQL Server所提供的Transact-SQL語(yǔ)言所編寫(xiě)的程序。經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中。存儲(chǔ)過(guò)程是數(shù)據(jù)庫(kù)中一個(gè)重要的對(duì)象2016-02-02
清除SQL SERVER錯(cuò)誤日志出現(xiàn)操作系統(tǒng)錯(cuò)誤的解決方法
SQL Server 外部的進(jìn)程可能會(huì)阻止 SQL Server 讀取這些文件。因此,錯(cuò)誤日志條目可能已丟失,并且或許不可能查看某些 SQL Server 錯(cuò)誤日志。請(qǐng)確保任何其他進(jìn)程都未將該文件鎖定為只寫(xiě)訪問(wèn)2013-08-08
sql?server設(shè)置數(shù)據(jù)庫(kù)某個(gè)字段值不能重復(fù)兩種方法
sqlserver的表中有一個(gè)列不能有相同的值,如何保證每次插入該列的值都是不同的,這篇文章主要給大家介紹了關(guān)于sql?server設(shè)置數(shù)據(jù)庫(kù)某個(gè)字段值不能重復(fù)的兩種方法,需要的朋友可以參考下2023-11-11
把數(shù)據(jù)批量插入具有Identity列的表的方法
把數(shù)據(jù)批量插入具有Identity列的表的方法。2009-08-08
MS SQL Server游標(biāo)(CURSOR)的學(xué)習(xí)使用
使用MS SQL Server這樣久,游標(biāo)一直沒(méi)有使用過(guò)。以前都是使用WHILE循環(huán)加臨時(shí)表來(lái)實(shí)現(xiàn)。剛剛聯(lián)系個(gè)示例了解到游標(biāo)概念與語(yǔ)法2014-06-06
MSSQL報(bào)錯(cuò):參數(shù)數(shù)據(jù)類(lèi)型 text 對(duì)于 replace 函數(shù)的參數(shù) 1 無(wú)效的解決辦法
在sql中使用replace函數(shù)可以替換某個(gè)字段中的一些內(nèi)容,但是如果字段是text類(lèi)型那么使用replace函數(shù)就會(huì)報(bào)“參數(shù)數(shù)據(jù)類(lèi)型text 對(duì)于replace 函數(shù)的參數(shù)1 無(wú)效?!?,這個(gè)錯(cuò)誤說(shuō)明對(duì)text或ntext類(lèi)型的數(shù)據(jù)在查詢(xún)中不能進(jìn)行字符串操作2014-03-03

