SQL?Server中row_number函數(shù)用法入門介紹
一、SQL Server Row_number函數(shù)簡介
ROW_NUMBER()是一個Window函數(shù),它為結(jié)果集的分區(qū)中的每一行分配一個連續(xù)的整數(shù)。 行號以每個分區(qū)中第一行的行號開頭。
語法實例:
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é)果集進(jìn)行編號
示例:
對test_user表的查詢結(jié)果標(biāo)記行號,并新增 “編號”列返回
-- 使用 ROW_NUMBER()函數(shù)對結(jié)果進(jìn)行編號 select ROW_NUMBER() over(order by id) as 編號,* from test_user;
運行結(jié)果:

可以看到,查詢結(jié)果新增了一列,專門用來標(biāo)記行號。
有了編號,我們就可以方便地進(jìn)行分頁查詢了,如何操作,可參考另外篇文章:sqlServer如何實現(xiàn)分頁查詢
2.對結(jié)果集按照指定列進(jìn)行分組,并在組內(nèi)按照指定列排序
示例:
把test_user表的name按照小組進(jìn)行分組顯示,分組后在組內(nèi)進(jìn)行從低到高id排序
-- 使用partition by對結(jié)果集進(jìn)行分組 select *,row_number() over(partition by name order by id) as n from test_user;
運行結(jié)果:

3.對結(jié)果集按照指定列去重
示例:
對 test_user表按name進(jìn)行分組顯示,結(jié)果集中只顯示每組中一條 id最小的數(shù)據(jù)
select a.* from ( select *,row_number() over(partition by name order by id) as row_id from test_user ) as a -- 只查詢組內(nèi)編號為1的數(shù)據(jù) where a.row_id<2;
運行結(jié)果:

查詢結(jié)果先是經(jīng)過name分組,然后組內(nèi)進(jìn)行id升序排序,組內(nèi)編號為1的第1條數(shù)據(jù),自然就是id最小的數(shù)據(jù)。
注意:
當(dāng)我們按成績分?jǐn)?shù)查詢名次等需求時,不能用row_number(),因為如果同班有兩個并列第一,row_number()只返回一個結(jié)果。這個時候就要用到另外一個函數(shù),rank()和dense_rank()。
rank()和dense_rank()區(qū)別:
1、RANK()
在計算排序時,若存在相同位次,會跳過之后的位次。
例如,有3條排在第1位時,排序為:1,1,1,4······
2、DENSE_RANK()
這就是題目中所用到的函數(shù),在計算排序時,若存在相同位次,不會跳過之后的位次。
例如,有3條排在第1位時,排序為:1,1,1,2······
總結(jié)
到此這篇關(guān)于SQL Server中row_number函數(shù)用法入門介紹的文章就介紹到這了,更多相關(guān)SQLServer row_number函數(shù)用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
sql腳本查詢數(shù)據(jù)庫表,數(shù)據(jù),結(jié)構(gòu),約束等操作的方法
本文介紹了“sql腳本查詢數(shù)據(jù)庫表,數(shù)據(jù),結(jié)構(gòu),約束等操作的方法”,需要的朋友可以參考一下2013-03-03
Sql Server刪除數(shù)據(jù)庫時提示數(shù)據(jù)庫正在被使用的解決辦法
當(dāng)您嘗試刪除SQL Server中的某個對象(如數(shù)據(jù)庫、表等)時,如果有程序或進(jìn)程正在使用該對象,您可能會收到一個錯誤信息,提示該對象正被使用,所以本文給大家介紹了Sql Server刪除數(shù)據(jù)庫時提示數(shù)據(jù)庫正在被使用的解決辦法,需要的朋友可以參考下2024-05-05
SQL?Server主鍵與外鍵設(shè)置以及相關(guān)理解
在數(shù)據(jù)庫的學(xué)習(xí)中對于一個表的主鍵和外鍵的認(rèn)識是非常重要的,下面這篇文章主要給大家介紹了關(guān)于SQL?Server主鍵與外鍵設(shè)置以及相關(guān)理解的相關(guān)資料,需要的朋友可以參考下2022-10-10

