您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“SQLServer中的row_number函數怎么使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“SQLServer中的row_number函數怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
ROW_NUMBER()是一個Window函數,它為結果集的分區中的每一行分配一個連續的整數。 行號以每個分區中第一行的行號開頭。
語法實例:
select *,row_number() over(partition by column1 order by column2) as n from tablename
在上面語法中:
PARTITION BY子句將結果集劃分為分區。 ROW_NUMBER()函數分別應用于每個分區,并重新初始化每個分區的行號。
PARTITION BY子句是可選的。如果未指定,ROW_NUMBER()函數會將整個結果集視為單個分區。
ORDER BY子句定義結果集的每個分區中的行的邏輯順序。 ORDER BY子句是必需的,因為ROW_NUMBER()函數對順序敏感
示例:
對test_user表的查詢結果標記行號,并新增 “編號”列返回
-- 使用 ROW_NUMBER()函數對結果進行編號 select ROW_NUMBER() over(order by id) as 編號,* from test_user;
運行結果:
可以看到,查詢結果新增了一列,專門用來標記行號。
有了編號,我們就可以方便地進行分頁查詢了。
示例:
把test_user表的name按照小組進行分組顯示,分組后在組內進行從低到高id排序
-- 使用partition by對結果集進行分組 select *,row_number() over(partition by name order by id) as n from test_user;
運行結果:
示例:
對 test_user表按name進行分組顯示,結果集中只顯示每組中一條 id最小的數據
select a.* from ( select *,row_number() over(partition by name order by id) as row_id from test_user ) as a -- 只查詢組內編號為1的數據 where a.row_id<2;
運行結果:
查詢結果先是經過name分組,然后組內進行id升序排序,組內編號為1的第1條數據,自然就是id最小的數據。
注意:
當我們按成績分數查詢名次等需求時,不能用row_number(),因為如果同班有兩個并列第一,row_number()只返回一個結果。這個時候就要用到另外一個函數,rank()和dense_rank()。
rank()和dense_rank()區別:
1、RANK()
在計算排序時,若存在相同位次,會跳過之后的位次。
例如,有3條排在第1位時,排序為:1,1,1,4······
2、DENSE_RANK()
這就是題目中所用到的函數,在計算排序時,若存在相同位次,不會跳過之后的位次。
例如,有3條排在第1位時,排序為:1,1,1,2······
讀到這里,這篇“SQLServer中的row_number函數怎么使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。