SQL Server中row_number函數(shù)的常見(jiàn)用法示例詳解
一.SQL Server Row_number函數(shù)簡(jiǎn)介
ROW_NUMBER()是一個(gè)Window函數(shù),它為結(jié)果集的分區(qū)中的每一行分配一個(gè)連續(xù)的整數(shù)。 行號(hào)以每個(gè)分區(qū)中第一行的行號(hào)開(kāi)頭。
以下是ROW_NUMBER()函數(shù)的語(yǔ)法實(shí)例:
select *,row_number() over(partition by column1 order by column2) as n from tablename
在上面語(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ì)順序敏感。
二.Row_number函數(shù)的具體用法
1.使用row_number()函數(shù)對(duì)結(jié)果集進(jìn)行編號(hào),如:
select ROW_NUMBER() over(order by recordid ) as 編號(hào),* from [dbo].[Basal_Anormal_Solution]
運(yùn)行結(jié)果:
2.對(duì)結(jié)果集按照指定列進(jìn)行分組,并在組內(nèi)按照指定列排序(如:把班級(jí)的總分按照小組進(jìn)行分組顯示,分組后在組內(nèi)進(jìn)行從高分到低分的排序)
select *,row_number() over(partition by createby order by actionOpeid) as n from [dbo].[Basal_Anormal_Solution]
運(yùn)行結(jié)果:

3.對(duì)結(jié)果集按照指定列去重(如:對(duì)學(xué)生成績(jī)按小組進(jìn)行分組顯示,結(jié)果集中只顯示每組中一位最高分的學(xué)生)
select a.* from (select *,row_number() over(partition by createby order by actionOpeid) as n from [dbo].[Basal_Anormal_Solution])as a where a.n<2
運(yùn)行結(jié)果:
注意:當(dāng)我們求的是第一名成績(jī)的時(shí)候,不能用row_number(),因?yàn)槿绻嘤袃蓚€(gè)并列第一,row_number()只返回一個(gè)結(jié)果。這個(gè)時(shí)候就要用到另外一個(gè)函數(shù),rank()和dense_rank();rank()和dense_rank()區(qū)別:rank()是跳躍排序,有兩個(gè)第二名時(shí)接下來(lái)就是第四名。這個(gè)時(shí)候我們通常會(huì)選擇用rank()函數(shù),靈活應(yīng)用。
總結(jié)
到此這篇關(guān)于SQL Server中row_number函數(shù)常見(jiàn)用法的文章就介紹到這了,更多相關(guān)SQL Server row_number函數(shù)用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MSSQL2005數(shù)據(jù)附加失敗報(bào)錯(cuò)3456解決辦法
今天在把數(shù)據(jù)庫(kù)備份出去,再到另一臺(tái)服務(wù)器上進(jìn)行數(shù)據(jù)還原時(shí)出現(xiàn),數(shù)據(jù)附加失敗錯(cuò)誤3456提示,下面來(lái)看我的解決過(guò)程2012-09-09
sqlserver 自動(dòng)備份所有數(shù)據(jù)庫(kù)的SQL
可自動(dòng)備份除系統(tǒng)數(shù)據(jù)庫(kù)外的所有數(shù)據(jù)庫(kù)。備份文件的周期保存周期可以更改。2010-03-03
mssql中得到當(dāng)天數(shù)據(jù)的語(yǔ)句
mssql中得到當(dāng)天數(shù)據(jù)的語(yǔ)句...2007-08-08
sqlserver 實(shí)現(xiàn)收縮數(shù)據(jù)庫(kù)日志操作
這篇文章主要介紹了sqlserver 實(shí)現(xiàn)收縮數(shù)據(jù)庫(kù)日志操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
清除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ù)CAST 和 CONVERT 以及在業(yè)務(wù)中的使用介紹
。最近時(shí)間剛從客戶端轉(zhuǎn)入后臺(tái)寫(xiě)服務(wù),對(duì)于后臺(tái)數(shù)據(jù)庫(kù)以及服務(wù)的書(shū)寫(xiě)完全是個(gè)小白,所以最近寫(xiě)的肯定沒(méi)有太多技術(shù)含量2013-01-01
深入SQL截取字符串(substring與patindex)的詳解
本篇文章是對(duì)SQL截取字符串(substring與patindex的使用)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

