Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'teki SQL analiz uç noktası
Microsoft Fabric'teki ambar
Microsoft Fabric'teki SQL veritabanı
Bu fonksiyon, sıralama değerlerinde boşluk olmadan bir sonuç kümesi bölümündeki her satırın sıralamasını döndürür. Belirli bir sıranın sıralaması, o satırdan önce gelen farklı sıralama değerlerinin sayısı artı bir artıdır.
Transact-SQL söz dizimi kuralları
Sözdizimi
DENSE_RANK ( ) OVER ( [ <partition_by_clause> ] < order_by_clause > )
Arguments
<partition_by_clause>
Önce FROM cümlesi tarafından üretilen sonuç kümesini bölümlere böler, ardından DENSE_RANK fonksiyon her bölüme uygulanır. Sözdizimi için PARTITION BYOVER Maddesi (Transact-SQL) bkz.
<order_by_clause>
Fonksiyonun DENSE_RANK bir bölümdeki satırlara uygulanma sırasını belirler.
Dönüş Türleri
bigint
Açıklamalar
Eğer iki veya daha fazla satır aynı bölümde aynı sıraya sahipse, her bir satır aynı sırayı alır. Örneğin, en iyi iki satış görevlisinin SalesYTD değeri aynıysa, ikisinin de bir sıralama değeri olur. Bir sonraki en yüksek SalesYTD puanına sahip satıcının sıralama değeri iki olacaktır. Bu, söz konusu satırdan önceki farklı satır sayısını bir kat aşar. Bu nedenle, fonksiyonun döndürdüğü DENSE_RANK sayıların boşlukları yoktur ve her zaman ardışık sıralama değerleri vardır.
Tüm sorgu için kullanılan sıralama sırası, sonuç kümesindeki satır sırasını belirler. Bu, birinci sırada sıralanan bir satırın bölümde ilk sıra olması gerekmediği anlamına gelir.
DENSE_RANK belirsiz değildir. Daha fazla bilgi için Deterministik ve Belirsiz Fonksiyonlar sayfasına bakınız.
Örnekler
A. Bir bölüm içindeki sıraları sıralamak
Bu örnek, envanterdeki ürünleri belirtilen envanter konumlarına göre, miktarlarına göre sıralar.
DENSE_RANK Sonuç kümesini böler LocationID ve mantıken sonuç kümesini 'ye göre Quantitysıralar. 494 ve 495 ürünlerinin aynı miktara sahip olduğunu fark edin. İkisi de aynı miktar değerine sahip olduğu için, ikisinin de bir değer değeri vardır.
USE AdventureWorks2022;
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 AS i
INNER JOIN Production.Product AS p
ON i.ProductID = p.ProductID
WHERE i.LocationID BETWEEN 3 AND 4
ORDER BY i.LocationID;
GO
Sonuç kümesi aşağıdadır.
ProductID Name LocationID Quantity Rank
----------- ---------------------------------- ---------- -------- -----
494 Paint - Silver 3 49 1
495 Paint - Blue 3 49 1
493 Paint - Red 3 41 2
496 Paint - Yellow 3 30 3
492 Paint - Black 3 17 4
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 sıraları sıralama
Bu örnek, maaşlarına göre sıralanmış en iyi on çalışanı geri getirir. Cümle SELECT bir PARTITION BY madde belirtmediği için, DENSE_RANK fonksiyon tüm sonuç kümesi satırlarına uygulanmıştır.
USE AdventureWorks2022;
GO
SELECT TOP(10) BusinessEntityID, Rate,
DENSE_RANK() OVER (ORDER BY Rate DESC) AS RankBySalary
FROM HumanResources.EmployeePayHistory;
Sonuç kümesi aşağıdadı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 7
285 48.101 8
274 48.101 8
C. Aynı sorguda kullanılan dört sıralama fonksiyonu
Bu örnek, dört sıralama fonksiyonunu göstermektedir
aynı sorguda kullanıldı. Her bir sıralama fonksiyonuna fonksiyona özel örnekler için bakınız.
USE AdventureWorks2022;
GO
SELECT p.FirstName, p.LastName
,ROW_NUMBER() OVER (ORDER BY a.PostalCode) AS "Row Number"
,RANK() OVER (ORDER BY a.PostalCode) AS Rank
,DENSE_RANK() OVER (ORDER BY a.PostalCode) AS "Dense Rank"
,NTILE(4) OVER (ORDER BY a.PostalCode) AS Quartile
,s.SalesYTD
,a.PostalCode
FROM Sales.SalesPerson AS s
INNER JOIN Person.Person AS p
ON s.BusinessEntityID = p.BusinessEntityID
INNER JOIN Person.Address AS a
ON a.AddressID = p.BusinessEntityID
WHERE TerritoryID IS NOT NULL AND SalesYTD <> 0;
Sonuç kümesi aşağıdadır.
| İlk İsim | Soyadı | Satır Numarası | Sıralama | Yoğun Rütbe | Dörttebirlik | SatışYTD | Posta Kodu |
|---|---|---|---|---|---|---|---|
| Michael | Blythe | 1 | 1 | 1 | 1 | 4557045.0459 | 98027 |
| Linda | Mitchell | 2 | 1 | 1 | 1 | 5200475.2313 | 98027 |
| Jillian | Carson | 3 | 1 | 1 | 1 | 3857163.6332 | 98027 |
| Garrett | Vargas | 4 | 1 | 1 | 1 | 1764938.9859 | 98027 |
| Tsvi | Reiter | 5 | 1 | 1 | 2 | 2811012.7151 | 98027 |
| Shu | Ito | 6 | 6 | 2 | 2 | 3018725.4858 | 98055 |
| José | Saraiva | 7 | 6 | 2 | 2 | 3189356.2465 | 98055 |
| David | Çalışkan | 8 | 6 | 2 | 3 | 3587378.4257 | 98055 |
| Tete | Mensa-Annan | 9 | 6 | 2 | 3 | 1931620.1835 | 98055 |
| Lynn | Tsoflias | 10 | 6 | 2 | 3 | 1758385.926 | 98055 |
| Rachel | Vural | 11 | 6 | 2 | 4 | 2241204.0424 | 98055 |
| Jae | Pak | 12 | 6 | 2 | 4 | 5015682.3752 | 98055 |
| Ranjit | Varkey Chudukatil | 13 | 6 | 2 | 4 | 3827950.238 | 98055 |
Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)
D: Bir bölüm içindeki sıraları sıralamak
Bu örnek, her satış bölgesindeki satış temsilcilerini toplam satışlarına göre sıralar.
DENSE_RANK Satır kümesini ile SalesTerritoryGroupböler ve sonuç kümesini 'ye göre SalesAmountQuotasıralar.
-- Uses AdventureWorks
SELECT LastName, SUM(SalesAmountQuota) AS TotalSales, SalesTerritoryGroup,
DENSE_RANK() OVER (PARTITION BY SalesTerritoryGroup ORDER BY SUM(SalesAmountQuota) DESC ) AS RankResult
FROM dbo.DimEmployee AS e
INNER JOIN dbo.FactSalesQuota AS sq ON e.EmployeeKey = sq.EmployeeKey
INNER JOIN dbo.DimSalesTerritory AS st ON e.SalesTerritoryKey = st.SalesTerritoryKey
WHERE SalesPersonFlag = 1 AND SalesTerritoryGroup != N'NA'
GROUP BY LastName, SalesTerritoryGroup;
Sonuç kümesi aşağıdadır.
LastName TotalSales SalesTerritoryGroup RankResult
---------------- ------------- ------------------- --------
Pak 10514000.0000 Europe 1
Varkey Chudukatil 5557000.0000 Europe 2
Valdez 2287000.0000 Europe 3
Carson 12198000.0000 North America 1
Mitchell 11786000.0000 North America 2
Blythe 11162000.0000 North America 3
Reiter 8541000.0000 North America 4
Ito 7804000.0000 North America 5
Saraiva 7098000.0000 North America 6
Vargas 4365000.0000 North America 7
Campbell 4025000.0000 North America 8
Ansman-Wolfe 3551000.0000 North America 9
Mensa-Annan 2753000.0000 North America 10
Tsoflias 1687000.0000 Pacific 1
Ayrıca Bkz.
RÜTBE (Transact-SQL)
ROW_NUMBER (Transact-SQL)
NTILE (Transact-SQL)
Derecelendirme İşlevleri (Transact-SQL)
Functions