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ı
Sonuç kümesinin bölüm içindeki her satırın sırasını döndürür. Bir sıranın sırası, bahsi geçen sıradan önceki sıraların sayısı artı bir artıdır.
ROW_NUMBER ve RANK benzerler.
ROW_NUMBER tüm satırları sırayla numaralandırır (örneğin 1, 2, 3, 4, 5).
RANK beraberlikler için aynı sayısal değeri sağlar (örneğin 1, 2, 2, 4, 5).
Uyarı
RANK sorgu çalıştırıldığında hesaplanan geçici bir değerdir. Bir tabloda sayıları kalıcı etmek için IDENTITY (Özellik) ve CREATE SEQUENCE bölümlerine bakınız.
Transact-SQL söz dizimi kuralları
Sözdizimi
RANK ( ) OVER ( [ partition_by_clause ] order_by_clause )
Arguments
OVER ( [ partition_by_clause ] order_by_clause )
partition_by_clause, cümle tarafından FROM üretilen sonuç kümesini, fonksiyonun uygulandığı bölümlere böler. Belirtilmezse, işlev sorgu sonuç kümesinin tüm satırlarını tek bir grup olarak ele alır.
order_by_clause, işlev uygulanmadan önce verilerin sırasını belirler.
order_by_clause zorunludur. Fonksiyon <rows or range clause> için cümlenin OVER bir kısmı belirtilemez RANK . Daha fazla bilgi için bkz. SELECT - OVER yan tümcesi.
Dönüş türleri
bigint
Açıklamalar
Eğer iki veya daha fazla sıra bir sıralama için eşitse, her berabere gelen sıra aynı sırayı alır. Örneğin, en iyi iki satış elemanı aynı SalesYTD değere sahipse, ikisi de bir sırada yer alır. Bir sonraki en yüksek SalesYTD satış görevlisi üçüncü sırada yer alır, çünkü iki sıra daha yüksek sırada yer alır. Bu nedenle, RANK fonksiyon her zaman ardışık tam sayılar döndürmez.
Tüm sorgu için kullanılan sıralama sırası, satırların bir sonuç kümesinde ne sırayla göründüğünü belirler.
RANK belirsiz değildir. Daha fazla bilgi için bkz. Deterministik ve deterministik olmayan fonksiyonlar.
Örnekler
Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.
A. Bir bölüm içindeki sıralar
Aşağıdaki örnek, envanterdeki ürünleri ve belirtilen envanter konumlarını miktarlarına göre sıralamaktadır. Sonuç kümesi, ile LocationID bölünür ve mantıksal olarak sıralanır Quantity. 3. konumda, 494 ve 495 numaralı ürünler aynı miktardadır. Çünkü berabere, ikisi de birinci sırada.
USE AdventureWorks2025;
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 AS i
INNER JOIN Production.Product AS p
ON i.ProductID = p.ProductID
WHERE i.LocationID BETWEEN 3 AND 4
ORDER BY i.LocationID;
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 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
B. Sonuç kümesindeki tüm satırları sıralayın
Aşağıdaki örnek, maaşlarına göre sıralanmış ilk 10 çalışanı geri getirir. Bir PARTITION BY cümle belirtilmediği için, RANK fonksiyon sonuç kümesindeki tüm satırlara uygulanır.
USE AdventureWorks2025;
GO
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 aşağıdadır.
BusinessEntityID Rate RankBySalary
---------------- --------------------- --------------------
1 125.50 1
2 63.4615 4
3 43.2692 11
4 29.8462 28
5 32.6923 22
6 32.6923 22
7 50.4808 6
8 40.8654 14
9 40.8654 14
10 42.4808 13
Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)
C: Bir bölüm içindeki sıraları sıralamak
Aşağıdaki örnek, her satış bölgesindeki satış temsilcilerini toplam satışlarına göre sıralamaktadır. Satır kümesi ile SalesTerritoryGroup bölünür ve sıralanır SalesAmountQuota.
-- Uses AdventureWorks
SELECT e.LastName,
st.SalesTerritoryGroup,
SUM(sq.SalesAmountQuota) AS TotalSales,
RANK() OVER (PARTITION BY st.SalesTerritoryGroup ORDER BY SUM(sq.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 e.SalesPersonFlag = 1
AND st.SalesTerritoryGroup <> N'NA'
GROUP BY e.LastName, st.SalesTerritoryGroup;
Sonuç kümesi aşağıdadır.
LastName SalesTerritoryGroup TotalSales RankResult
------------------ -------------------- ------------ -----------
Pak Europe 10514000.00 1
Varkey Chudukatil Europe 5557000.00 2
Valdez Europe 2287000.00 3
Carson North America 12198000.00 1
Mitchell North America 11786000.00 2
Blythe North America 11162000.00 3
Reiter North America 8541000.00 4
Ito North America 7804000.00 5
Saraiva North America 7098000.00 6
Vargas North America 4365000.00 7
Campbell North America 4025000.00 8
Ansman-Wolfe North America 3551000.00 9
Mensa-Annan North America 2753000.00 10
Tsoflias Pacific 1687000.00 1