RANK (Transact-sql)
Sonuç kümesindeki her satırı bölüm içerisinde verir. Satır sırası satırdan önce söz konusu gelir sırada sayısı artı biri olduğunu.
Transact-SQL Sözdizim Kuralları
Sözdizimi
RANK ( ) OVER ( [ partition_by_clause ] order_by_clause )
Bağımsız değişkenler
- OVER (partition_by_clauseorder_by_clause)
partition_by_clausefrom yan tümcesi tarafından üretilen işlevinin uygulandığı bölümler halinde sonuç kümesi ayırır. Belirtilmemişse, işlev tüm satırları sorgu sonuç kümesinde tek Grup olarak davranır. order_by_clauseişlevi uygulanmadan önce verilerin sırasını belirler. order_by_clauseGerekiyor. <Satır veya aralığı yan> üzerinde sıralama işlevi için yan tümcesi belirtilemez. Daha fazla bilgi için, bkz. Yan (Transact-sql).
Dönüş Türleri
bigint
Açıklamalar
İki veya daha fazla satır sıralaması için kravat bağlı her satır alır aynı değerde. Örneğin, eğer iki en iyi satıcıyı aynı SalesYTDdeğeri iki sıralama bir. Satış Temsilcisi ile sonraki en yüksek SalesYTDçünkü yüksek sıralanır iki satır sayısı üç, sıralanır. Bu nedenle, rank işlevi ardışık tamsayıların hep döndürmez.
Tüm sorgu için kullanılan sıralama düzeni satırları sonuç kümesinde görünme sırasını belirler.
Örnekler
A.Bir bölüm içindeki satırları sıralama
Aşağıdaki örnek, belirtilen stok yerlere onların miktarlarına göre stoktaki ürünler yer alıyor. Sonuç kümesi tarafından bölümlendirilir LocationIDve mantıklı tarafından sipariş Quantity. 494 Ve 495 ürününün aynı miktarı olduğunu fark. Onlar bağlı olduğundan, bunların her ikisi de bir sıralanır.
USE AdventureWorks2012;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity
,RANK() OVER
(PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS 'Rank'
FROM Production.ProductInventory i
INNER JOIN Production.Product p
ON i.ProductID = p.ProductID
WHERE i.LocationID BETWEEN 3 AND 4
ORDER BY i.LocationID;
GO
USE AdventureWorks2012;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity
,RANK() OVER
(PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS 'Rank'
FROM Production.ProductInventory i
INNER JOIN Production.Product p
ON i.ProductID = p.ProductID
WHERE i.LocationID BETWEEN 3 AND 4
ORDER BY i.LocationID;
GO
Sonuç kümesi buradadır.
ProductID Name LocationID Quantity Rank
----------- ---------------------- ------------ -------- ----
494 Paint - Silver 3 49 1
495 Paint - Blue 3 49 1
493 Paint - Red 3 41 3
496 Paint - Yellow 3 30 4
492 Paint - Black 3 17 5
495 Paint - Blue 4 35 1
496 Paint - Yellow 4 25 2
493 Paint - Red 4 24 3
492 Paint - Black 4 14 4
494 Paint - Silver 4 12 5
(10 row(s) affected)
ProductID Name LocationID Quantity Rank
----------- ---------------------- ------------ -------- ----
494 Paint - Silver 3 49 1
495 Paint - Blue 3 49 1
493 Paint - Red 3 41 3
496 Paint - Yellow 3 30 4
492 Paint - Black 3 17 5
495 Paint - Blue 4 35 1
496 Paint - Yellow 4 25 2
493 Paint - Red 4 24 3
492 Paint - Black 4 14 4
494 Paint - Silver 4 12 5
(10 row(s) affected)
B.Sonuç kümesindeki tüm satırları sıralama
Aşağıdaki örnek, üst on çalışanları tarafından kendi maaş sırada verir. Bir bölümü tarafından yan belirtilmemiş olduğundan, sonuç kümesindeki tüm satırları sıralama işlevi uygulandığı.
USE AdventureWorks2012
SELECT TOP(10) BusinessEntityID, Rate,
RANK() OVER (ORDER BY Rate DESC) AS RankBySalary
FROM HumanResources.EmployeePayHistory AS eph1
WHERE RateChangeDate = (SELECT MAX(RateChangeDate)
FROM HumanResources.EmployeePayHistory AS eph2
WHERE eph1.BusinessEntityID = eph2.BusinessEntityID)
ORDER BY BusinessEntityID;
USE AdventureWorks2012
SELECT TOP(10) BusinessEntityID, Rate,
RANK() OVER (ORDER BY Rate DESC) AS RankBySalary
FROM HumanResources.EmployeePayHistory AS eph1
WHERE RateChangeDate = (SELECT MAX(RateChangeDate)
FROM HumanResources.EmployeePayHistory AS eph2
WHERE eph1.BusinessEntityID = eph2.BusinessEntityID)
ORDER BY BusinessEntityID;
Sonuç kümesi buradadır.
BusinessEntityID Rate RankBySalary
---------------- --------------------- --------------------
1 125.50 1
2 63.4615 4
3 43.2692 8
4 29.8462 19
5 32.6923 16
6 32.6923 16
7 50.4808 6
8 40.8654 10
9 40.8654 10
10 42.4808 9
BusinessEntityID Rate RankBySalary
---------------- --------------------- --------------------
1 125.50 1
2 63.4615 4
3 43.2692 8
4 29.8462 19
5 32.6923 16
6 32.6923 16
7 50.4808 6
8 40.8654 10
9 40.8654 10
10 42.4808 9