Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
Visszaadja minden sor rangját az eredményhalmaz partícióján belül. A sorrend egy plusz a sorban lévő rangok száma.
ROW_NUMBER és RANK hasonlóak.
ROW_NUMBER az összes sort sorsorban számozzák (például 1, 2, 3, 4, 5).
RANK ugyanazt a számértéket adja a holtversenyekre (például 1, 2, 2, 4, 5).
Megjegyzés:
RANK egy ideiglenes érték, amelyet a lekérdezés futtatásakor számítanak ki. A számok megtartásához egy táblázatban lásd az IDENTITY (Property) és a CREATE SEQUENCE (SEQUENCE) menük.
Transact-SQL szintaxis konvenciók
Szemantika
RANK ( ) OVER ( [ partition_by_clause ] order_by_clause )
Arguments
VÉGE ( [ partition_by_clause ] order_by_clause )
A partition_by_clause a klauzula által generált FROM eredményhalmazt osztja szétosztásokra, amelyekhez a függvény alkalmazzák. Ha nincs megadva, a függvény a lekérdezés eredményhalmazának összes sorát egyetlen csoportként kezeli.
A order_by_clause határozza meg az adatok sorrendjét a függvény alkalmazása előtt. A order_by_clause szükséges. A <rows or range clause>OVER klauzula nem lehet megadni a RANK függvényhez. További információ: SELECT – OVER záradék.
Visszatérési típusok
bigint
Megjegyzések
Ha két vagy több sor dönt egy rangban, minden kiegyenlített sor ugyanazt a rangot kapja. Például, ha a két legjobb értékesítő ugyanazt SalesYTD az értéket képviseli, mindkettő egy rangsorban van. A következő legmagasabb SalesYTD értékesítő a harmadik helyen áll, mert két sor van magasabb. Ezért a RANK függvény nem mindig vezet vissza egymást követő egész számokat.
Az egész lekérdezéshez használt rendezési sorrend határozza meg, hogy a sorok milyen sorrendben jelennek meg az eredményhalmazban.
RANK nemdeterminista. További információ: Determinisztikus és nem determinisztikus függvények.
Példák
A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.
A. Rangsorok egy partíción belül
Az alábbi példa a készletben lévő termékeket a megadott készlethelyeken a mennyiségük szerint rangsorolja. Az eredményhalmaz partícióval LocationID van osztva, és logikusan sorolva .Quantity A 3. helyszínen a 494 és 495 termékek ugyanannyi mennyiséget tartalmaznak. Mivel holtversenyben vannak, mindketten egy rangsorban vannak.
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;
Itt van az eredmények összessége.
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. Rangsorolni az összes sort egy eredményhalmazban
Az alábbi példa a legjobb 10 alkalmazottat adja vissza, fizetésük szerint rangsorolva. Mivel egy PARTITION BY záradék nincs megadva, a RANK függvényt az eredményhalmaz minden sorára alkalmazzák.
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;
Itt van az eredmények összessége.
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
Példák: Azure Synapse Analytics and Analytics Platform System (PDW)
C: Sorok rangsorolása egy partíción belül
Az alábbi példa az értékesítési területek értékesítési képviselőit az összes eladásuk alapján rangsorolja. A sorhalmazt partíciója és SalesTerritoryGroup rendezése .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;
Itt van az eredmények összessége.
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