日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

SQL Server 2005中的ROW_NUMBER和RANK

發(fā)布時(shí)間:2023/12/10 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server 2005中的ROW_NUMBER和RANK 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
下面介紹兩個(gè)SQL Server 2005 中的新東東:
ROW_NUMBER
返回結(jié)果集分區(qū)內(nèi)行的序列號(hào),每個(gè)分區(qū)的第一行從 1 開(kāi)始。

語(yǔ)法:
ROW_NUMBER ( ) ????OVER ( [ <partition_by_clause> ] <order_by_clause> )

備注:
ORDER BY 子句可確定在特定分區(qū)中為行分配唯一 ROW_NUMBER 的順序。

參數(shù):
<partition_by_clause>
將 FROM 子句生成的結(jié)果集劃入應(yīng)用了 ROW_NUMBER 函數(shù)的分區(qū)。
<order_by_clause>
確定將 ROW_NUMBER 值分配給分區(qū)中的行的順序。

返回類型:
bigint

示例:
以下示例將根據(jù)年初至今的銷售額,返回 AdventureWorks 中銷售人員的 ROW_NUMBER。
USE?AdventureWorks
GO
SELECT?c.FirstName,?c.LastName,?ROW_NUMBER()?OVER(ORDER?BY?SalesYTD?DESC)?AS?'Row?Number',?s.SalesYTD,?a.PostalCode
FROM?Sales.SalesPerson?s?JOIN?Person.Contact?c?on?s.SalesPersonID?=?c.ContactID
JOIN?Person.Address?a?ON?a.AddressID?=?c.ContactID
WHERE?TerritoryID?IS?NOT?NULL?AND?SalesYTD?<>?0

以下示例將返回行號(hào)為 50 到 60(含)的行,并以 OrderDate 排序。 USE?AdventureWorks;
GO
WITH?OrderedOrders?AS
(
SELECT?SalesOrderID,?OrderDate,
ROW_NUMBER()?
OVER?(order?by?OrderDate)as?RowNumber
FROM?Sales.SalesOrderHeader?)?
SELECT?*?
FROM?OrderedOrders?
WHERE?RowNumber?between?50?and?60;
RANK
返回結(jié)果集的分區(qū)內(nèi)每行的排名。行的排名是相關(guān)行之前的排名數(shù)加一。

語(yǔ)法:
RANK ( )????OVER ( [ < partition_by_clause > ] < order_by_clause > )

備注:
如果兩個(gè)或多個(gè)行與一個(gè)排名關(guān)聯(lián),則每個(gè)關(guān)聯(lián)行將得到相同的排名。例如,如果兩位頂尖銷售員具有同樣的 SalesYTD 值,他們將并列第一。由于已有兩行排名在前,所以具有下一個(gè)最大 SalesYTD 的銷售人員將排名第三。因此,RANK 函數(shù)并不總返回連續(xù)整數(shù)。

用于整個(gè)查詢的排序順序決定了行在結(jié)果集中的顯示順序。這也隱含了行在每個(gè)分區(qū)中的排名。

參數(shù):
< partition_by_clause >
將 FROM 子句生成的結(jié)果集劃分為要應(yīng)用 RANK 函數(shù)的分區(qū)。
< order_by_clause >
確定將 RANK 值應(yīng)用于分區(qū)中的行時(shí)所基于的順序。

返回類型:
bigint

示例:
以下示例按照數(shù)量對(duì)清單中的產(chǎn)品進(jìn)行了排名。行集按 LocationID 分區(qū),按 Quantity 排序。

USE?AdventureWorks;
GO
SELECT?i.ProductID,?p.Name,?i.LocationID,?i.Quantity,?RANK()?OVER?(PARTITION?BY?i.LocationID?order?by?i.Quantity)?as?RANK
FROM?Production.ProductInventory?i?JOIN?Production.Product?p?
ON?i.ProductID?=?p.ProductID
ORDER?BY?p.Name
GO

下面是和朋友討論的一個(gè)小例子,不知道對(duì)不對(duì),大家指教啊:
一個(gè)記錄集{1,1,1,4,4,4,7,7,7,7,7,7,7,7,7}
當(dāng)用 rank between 1 and 10 過(guò)濾 {1,1,1,4,4,4,7,7,7,7,7,7,7,7,7}時(shí),就會(huì)得到超過(guò)十條的記錄
用rownumber between 1 and 10得到的是{1,1,1,4,4,4,7,7,7,7}
也就是說(shuō):
用rank就是同樣的記錄看作是進(jìn)行一個(gè)排名,得到的有可能大于10條
例如:比賽中第一名1個(gè),第二名1個(gè),第三名3個(gè),下一個(gè)人就不是第四名而是第六名
?

人員<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

名次

A

1

B

2

C

3

D

3

E

3

F

6

G

7

H

8

I

9

J

10


如果用rank就是從這個(gè)記錄集中選出結(jié)果,例如前4名我們得到的是如下結(jié)果:
?

人員

名次

A

1

B

2

C

3

D

3

E

3

F

6


而rownumber不管重復(fù)僅得到4條而已,結(jié)果如下:
?

人員

名次

A

1

B

2

C

3

D

3

轉(zhuǎn)載于:https://www.cnblogs.com/Bear-Study-Hard/archive/2006/02/09/327723.html

總結(jié)

以上是生活随笔為你收集整理的SQL Server 2005中的ROW_NUMBER和RANK的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。