dense_rank (Transact-sql)

Bölüm içinde bir satır sıralaması herhangi bir boşluk olmayan bir sonuç kümesi verir. Satır sırası satırdan önce söz konusu gelen farklı sırada sayısı artı biri olduğunu.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

DENSE_RANK ( ) OVER ( [ <partition_by_clause> ] < order_by_clause > )

Bağımsız değişkenler

  • <partition_by_clause>
    Sonuç kümesi tarafından üretilen ayıran from yan bölme dense_rank işlevinin uygulandığı. Bölüm tarafından sözdizimini, görmek Yan (Transact-sql).

  • <order_by_clause>
    dense_rank işlevi bir bölümündeki satırların uygulandığı sırayı belirler.

Dönüş Türleri

bigint

Açıklamalar

Aynı bölümde bir sıralaması için iki veya daha fazla satır 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 SalesYTDis ranked sayısı iki. Bu daha fazla bu satırdan önce gelen farklı satır sayısı. Bu nedenle dense_rank işlevi tarafından döndürülen sayılar değil boşluklar var ve her zaman birbirini izleyen sırada var.

Tüm sorgu için kullanılan sıralama düzeni satırları bir sonuç görünme sırasını belirler. Bu sırada bir satır bölümü ilk satırda olmak zorunda değil anlamına gelir.

Ö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
    ,DENSE_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
    ,DENSE_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, 
       DENSE_RANK() OVER (ORDER BY Rate DESC) AS RankBySalary
FROM HumanResources.EmployeePayHistory;

USE AdventureWorks2012
SELECT TOP(10) BusinessEntityID, Rate, 
       DENSE_RANK() OVER (ORDER BY Rate DESC) AS RankBySalary
FROM HumanResources.EmployeePayHistory;

Sonuç kümesi buradadır.

BusinessEntityID Rate                  RankBySalary
---------------- --------------------- --------------------
1                125.50                1
25               84.1346               2
273              72.1154               3
2                63.4615               4
234              60.0962               5
263              50.4808               6
7                50.4808               6
234              48.5577               8
285              48.101                9
274              48.101                9

BusinessEntityID Rate                  RankBySalary
---------------- --------------------- --------------------
1                125.50                1
25               84.1346               2
273              72.1154               3
2                63.4615               4
234              60.0962               5
263              50.4808               6
7                50.4808               6
234              48.5577               8
285              48.101                9
274              48.101                9

Ayrıca bkz.

Başvuru

RANK (Transact-sql)

ROW_NUMBER (Transact-SQL)

NTILE (Transact-sql)

Sıralama işlevleri (Transact-sql)

Yerleşik İşlevler (Transact-SQL)