麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

SQLSERVER 2005的ROW_NUMBER、RANK、DENSE_RANK的用法

2020-10-30 19:10:08
字體:
供稿:網(wǎng)友
ROW_NUMBER()

說明:返回結(jié)果集分區(qū)內(nèi)行的序列號,每個(gè)分區(qū)的第一行從
1 開始。
語法: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
/*
FirstName  LastName    Row Number  SalesYTD      PostalCode
---------  ----------  ----------  ------------  ----------------------------
Shelley    Dyck        1           5200475.2313  98027
Gail       Erickson    2           5015682.3752  98055
Maciej     Dusza       3           4557045.0459  98027
Linda      Ecoffey     4           3857163.6332  98027
Mark       Erickson    5           3827950.238   98055
Terry      Eminhizer   6           3587378.4257  98055
Michael    Emanuel     7           3189356.2465  98055
Jauna      Elson       8           3018725.4858  98055
Carol      Elliott     9           2811012.7151  98027
Janeth     Esteves     10          2241204.0424  98055
Martha     Espinoza    11          1931620.1835  98055
Carla      Eldridge    12          1764938.9859  98027
Twanna     Evans       13          1758385.926   98055
(13 行受影響)
*/

/*以下示例將返回行號為 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;
/*
SalesOrderID OrderDate               RowNumber
------------ ----------------------- --------------------
43708        2001-07-03 00:00:00.000 50
43709        2001-07-03 00:00:00.000 51
43710        2001-07-03 00:00:00.000 52
43711        2001-07-04 00:00:00.000 53
43712        2001-07-04 00:00:00.000 54
43713        2001-07-05 00:00:00.000 55
43714        2001-07-05 00:00:00.000 56
43715        2001-07-05 00:00:00.000 57
43716        2001-07-05 00:00:00.000 58
43717        2001-07-05 00:00:00.000 59
43718        2001-07-06 00:00:00.000 60
(11 行受影響)
*/

--------------------------------------------------------------
RANK()

說明:返回結(jié)果集的分區(qū)內(nèi)每行的排名。行的排名是相關(guān)行之前的排名數(shù)加一。
語法: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ù)量對清單中的產(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
/*
ProductID   Name                                               LocationID Quantity RANK
----------- -------------------------------------------------- ---------- -------- --------------------
1           Adjustable Race                                    6          324      71
1           Adjustable Race                                    1          408      78
1           Adjustable Race                                    50         353      117
2           Bearing Ball                                       6          318      67
2           Bearing Ball                                       1          427      85
2           Bearing Ball                                       50         364      122
3           BB Ball Bearing                                    50         324      106
3           BB Ball Bearing                                    1          585      110
3           BB Ball Bearing                                    6          443      115
4           Headset Ball Bearings                              1          512      99
4           Headset Ball Bearings                              6          422      108
4           Headset Ball Bearings                              50         388      140
316         Blade                                              10         388      33
......
(1069 行受影響)
*/
SQL code

--接上.
--
-----------------------------------------------------------------------------------
DENSE_RANK()

說明:返回結(jié)果集分區(qū)中行的排名,在排名中沒有任何間斷。行的排名等于所討論行之前的所有排名數(shù)加一。
語法:DENSE_RANK ()
OVER ( [ < partition_by_clause > ] < order_by_clause > )
備注:如果有兩個(gè)或多個(gè)行受同一個(gè)分區(qū)中排名的約束,則每個(gè)約束行將接收相同的排名。
例如,如果兩位頂尖銷售員具有相同的 SalesYTD 值,則他們將并列第一。
接下來 SalesYTD 最高的銷售人員排名第二。該排名等于該行之前的所有行數(shù)加一。
因此,DENSE_RANK 函數(shù)返回的數(shù)字沒有間斷,并且始終具有連續(xù)的排名。
整個(gè)查詢所用的排序順序確定了各行在結(jié)果中的顯示順序。這說明排名第一的行可以不是分區(qū)中的第一行。
參數(shù):
< partition_by_clause > :將 FROM 子句所生成的結(jié)果集劃分為數(shù)個(gè)將應(yīng)用 DENSE_RANK 函數(shù)的分區(qū)。
< order_by_clause >:確定將 DENSE_RANK 值應(yīng)用于分區(qū)中各行的順序。
返回類型:
bigint

示例:
/*以下示例返回各位置上產(chǎn)品數(shù)量的 DENSE_RANK。 */
USE AdventureWorks;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity, DENSE_RANK() OVER (PARTITION BY i.LocationID order by i.Quantity) as DENSE_RANK
FROM Production.ProductInventory i JOIN Production.Product p ON i.ProductID = p.ProductID
ORDER BY Name;
GO
/*
ProductID Name LocationID Quantity DENSE_RANK
----------- -------------------------------------------------- ---------- -------- --------------------
1 Adjustable Race 1 408 57
1 Adjustable Race 6 324 52
1 Adjustable Race 50 353 82
879 All-Purpose Bike Stand 7 144 34
712 AWC Logo Cap 7 288 38
3 BB Ball Bearing 50 324 74
3 BB Ball Bearing 6 443 81
3 BB Ball Bearing 1 585 82
*/

-------------------------------------------------------------------------------------------------------
將上面三個(gè)函數(shù)放在一起計(jì)算,更能明顯看出各個(gè)函數(shù)的功能。

CREATE TABLE rankorder(orderid INT,qty INT)
INSERT rankorder VALUES(30001,10)
INSERT rankorder VALUES(10001,10)
INSERT rankorder VALUES(10006,10)
INSERT rankorder VALUES(40005,10)
INSERT rankorder VALUES(30003,15)
INSERT rankorder VALUES(30004,20)
INSERT rankorder VALUES(20002,20)
INSERT rankorder VALUES(20001,20)
INSERT rankorder VALUES(10005,30)
INSERT rankorder VALUES(30007,30)
INSERT rankorder VALUES(40001,40)
INSERT rankorder VALUES(30007,30)
GO
--對一個(gè)列qty進(jìn)行的排序
SELECT orderid,qty,
ROW_NUMBER()
OVER(ORDER BY qty) AS rownumber,
RANK()
OVER(ORDER BY qty) AS rank,
DENSE_RANK()
OVER(ORDER BY qty) AS denserank
FROM rankorder
ORDER BY qty
/*
orderid qty rownumber rank denserank
----------- ----------- -------------------- -------------------- --------------------
30001 10 1 1 1
10001 10 2 1 1
10006 10 3 1 1
40005 10 4 1 1
30003 15 5 5 2
30004 20 6 6 3
20002 20 7 6 3
20001 20 8 6 3
10005 30 9 9 4
30007 30 10 9 4
30007 30 11 9 4
40001 40 12 12 5
(12 行受影響)
*/

--對兩個(gè)列qty,orderid進(jìn)行的排序
SELECT orderid,qty,
ROW_NUMBER()
OVER(ORDER BY qty,orderid) AS rownumber,
RANK()
OVER(ORDER BY qty,orderid) AS rank,
DENSE_RANK()
OVER(ORDER BY qty,orderid) AS denserank
FROM rankorder
ORDER BY qty,orderid
drop table rankorder
/*
orderid qty rownumber rank denserank
----------- ----------- -------------------- -------------------- --------------------
10001 10 1 1 1
10006 10 2 2 2
30001 10 3 3 3
40005 10 4 4 4
30003 15 5 5 5
20001 20 6 6 6
20002 20 7 7 7
30004 20 8 8 8
10005 30 9 9 9
30007 30 10 10 10
30007 30 11 10 10
40001 40 12 12 11
(12 行受影響)
*/
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久成年网站 | www.精品一区 | 欧美3p激情一区二区三区猛视频 | 国产精品视频自拍 | 日本欧美一区二区三区在线观看 | 国产精品一区二区视频 | 久久撸视频 | 亚洲成人高清在线观看 | 国产亚洲精彩视频 | 国产成人在线观看免费网站 | 亚洲成人久久精品 | 一级免费大片 | 毛片小网站 | 国产午夜精品一区二区三区免费 | 一级精品 | 日本a在线观看 | 91成人免费看片 | 毛片毛片免费看 | 国产女厕一区二区三区在线视 | 男女亲热网站 | 欧美视频在线一区二区三区 | 亚洲精品午夜国产va久久成人 | 欧美黄一区 | 91在线色 | 日日草夜夜操 | 免费一级毛片在线播放视频老 | 毛片一级免费看 | 久久不雅视频 | 午夜小网站 | 视频国产一区二区 | 红桃一区 | 羞羞羞网站 | 成人影片在线免费观看 | 精品一区二区久久久久久按摩 | 亚洲性爰| 午夜视频在线观看免费视频 | 91快色| 亚洲性生活视频 | 久久精品视频12 | 粉嫩蜜桃麻豆免费大片 | 日本羞羞的午夜电视剧 |