SQL Server中row_number函數(shù)的常見用法示例詳解
一.SQL Server Row_number函數(shù)簡介
ROW_NUMBER()是一個Window函數(shù),它為結(jié)果集的分區(qū)中的每一行分配一個連續(xù)的整數(shù)。 行號以每個分區(qū)中第一行的行號開頭。
以下是ROW_NUMBER()函數(shù)的語法實例:
select *,row_number() over(partition by column1 order by column2) as n from tablename
在上面語法中:
- PARTITION BY子句將結(jié)果集劃分為分區(qū)。 ROW_NUMBER()函數(shù)分別應(yīng)用于每個分區(qū),并重新初始化每個分區(qū)的行號。
- PARTITION BY子句是可選的。如果未指定,ROW_NUMBER()函數(shù)會將整個結(jié)果集視為單個分區(qū)。
- ORDER BY子句定義結(jié)果集的每個分區(qū)中的行的邏輯順序。 ORDER BY子句是必需的,因為ROW_NUMBER()函數(shù)對順序敏感。
二.Row_number函數(shù)的具體用法
1.使用row_number()函數(shù)對結(jié)果集進行編號,如:
select ROW_NUMBER() over(order by recordid ) as 編號,* from [dbo].[Basal_Anormal_Solution]
運行結(jié)果:

2.對結(jié)果集按照指定列進行分組,并在組內(nèi)按照指定列排序(如:把班級的總分按照小組進行分組顯示,分組后在組內(nèi)進行從高分到低分的排序)
select *,row_number() over(partition by createby order by actionOpeid) as n from [dbo].[Basal_Anormal_Solution]
運行結(jié)果:

3.對結(jié)果集按照指定列去重(如:對學(xué)生成績按小組進行分組顯示,結(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
運行結(jié)果:

注意:當我們求的是第一名成績的時候,不能用row_number(),因為如果同班有兩個并列第一,row_number()只返回一個結(jié)果。這個時候就要用到另外一個函數(shù),rank()和dense_rank();rank()和dense_rank()區(qū)別:rank()是跳躍排序,有兩個第二名時接下來就是第四名。這個時候我們通常會選擇用rank()函數(shù),靈活應(yīng)用。
總結(jié)
到此這篇關(guān)于SQL Server中row_number函數(shù)常見用法的文章就介紹到這了,更多相關(guān)SQL Server row_number函數(shù)用法內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信