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é)果集進行編號
示例:
對test_user表的查詢結(jié)果標記行號,并新增 “編號”列返回
-- 使用 ROW_NUMBER()函數(shù)對結(jié)果進行編號 select ROW_NUMBER() over(order by id) as 編號,* from test_user;
運行結(jié)果:
可以看到,查詢結(jié)果新增了一列,專門用來標記行號。
有了編號,我們就可以方便地進行分頁查詢了,如何操作,可參考另外篇文章:sqlServer如何實現(xiàn)分頁查詢
2.對結(jié)果集按照指定列進行分組,并在組內(nèi)按照指定列排序
示例:
把test_user表的name按照小組進行分組顯示,分組后在組內(nèi)進行從低到高id排序
-- 使用partition by對結(jié)果集進行分組 select *,row_number() over(partition by name order by id) as n from test_user;
運行結(jié)果:
3.對結(jié)果集按照指定列去重
示例:
對 test_user表按name進行分組顯示,結(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)進行id升序排序,組內(nèi)編號為1的第1條數(shù)據(jù),自然就是id最小的數(shù)據(jù)。
注意:
當(dāng)我們按成績分數(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 server刪除前1000行數(shù)據(jù)的方法實例
最近處理數(shù)據(jù)的時候遇到了個問題,需要利用sql刪除表格的前1000行數(shù)據(jù),嘗試過后這里給大家分享下過程,所以下面這篇文章主要給大家介紹了關(guān)于sql server刪除前1000行數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2021-08-08揭秘SQL Server 2014有哪些新特性(3)-可更新列存儲聚集索引
可更新的列存儲索引作為SQL Server 2014的一個關(guān)鍵功能之一,在提升數(shù)據(jù)庫的查詢性能方面貢獻非常突出。據(jù)微軟統(tǒng)計,在面向OLAP查詢統(tǒng)計類系統(tǒng)中,相比其他SQL傳統(tǒng)版本的數(shù)據(jù)庫,報表查詢的性能最大可提升上十倍。2014-08-08sqlserver 動態(tài)創(chuàng)建臨時表的語句分享
開發(fā)業(yè)務(wù)需求,需要對一個表作數(shù)據(jù)分析,由于數(shù)據(jù)量較大,而且分析時字段會隨條件相應(yīng)變化而變化2012-01-01SQL Server使用腳本實現(xiàn)自動備份的思路詳解
這篇文章主要介紹了SQL Server使用腳本實現(xiàn)自動備份的思路詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04SQL中的單條件判斷函數(shù)IF和多條件判斷CASE WHEN的用法
MySQL提供了IF、IFNULL、CASE等條件判斷函數(shù),本文就來介紹一下SQL中的單條件判斷函數(shù)IF和多條件判斷CASE WHEN的用法,感興趣的可以了解一下2023-10-10sqlserver 2000數(shù)據(jù)庫同步 同步兩個SQLServer數(shù)據(jù)庫的內(nèi)容
程序代碼可以有版本管理CVS進行同步管理,可是數(shù)據(jù)庫同步就非常麻煩,只能自己改了一個后再去改另一個,如果忘記了更改另一個經(jīng)常造成兩個數(shù)據(jù)庫的結(jié)構(gòu)或內(nèi)容上不一致.2010-05-05