Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Vrátí hodnost každého řádku v rámci rozdělení výsledné množiny. Pořadí řady je jedna plus počet pořadí, které předcházejí danému řádku.
ROW_NUMBER a RANK jsou podobné.
ROW_NUMBER čísluje všechny řádky postupně (například 1, 2, 3, 4, 5).
RANK poskytuje stejnou číselnou hodnotu pro remízy (například 1, 2, 2, 4, 5).
Poznámka:
RANK je dočasná hodnota vypočítaná při spuštění dotazu. Pro zachování čísel v tabulce viz IDENTITA (Vlastnost) a VYTVOŘIT SEKVENCI.
Syntaxe
RANK ( ) OVER ( [ partition_by_clause ] order_by_clause )
Arguments
KONEC ( [ partition_by_clause ] order_by_clause )
partition_by_clause rozděluje množinu výsledků vytvořenou klauzulí FROM na partce, na které je funkce aplikována. Pokud není zadáno, funkce zachází se všemi řádky sady výsledků dotazu jako s jednou skupinou.
order_by_clause určuje pořadí dat před použití funkce.
Je potřeba order_by_clause. Klauzule <rows or range clause> z OVER nelze pro funkci RANK specifikovat. Další informace naleznete v tématu SELECT - OVER klauzule.
Návratové typy
bigint
Poznámky
Pokud se dvě nebo více řad shodují o jednu řadu, každá řada na stejné úrovni získá stejnou hodnotu. Například pokud mají dva nejlepší prodejci stejnou SalesYTD hodnotu, oba jsou na prvním místě. Prodejce s dalším nejvyšším SalesYTD hodnocením je na třetím místě, protože jsou tam dva řádky, které jsou hodnoceny výš. Proto RANK funkce ne vždy vrací po sobě jdoucí celá čísla.
Pořadí třídění používané pro celý dotaz určuje pořadí, v jakém se řádky objevují ve výsledné množině.
RANK je nedeterministické. Další informace naleznete v tématu Deterministické a nedeterministické funkce.
Examples
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
A. Řádky pořadí v rámci rozkladu
Následující příklad řadí produkty ve skladech na určených místech podle jejich množství. Množina výsledků je rozdělena a LocationID logicky uspořádaná podle Quantity. V lokalitě 3 mají produkty 494 a 495 stejné množství. Protože jsou na stejné úrovni, jsou oba na prvním místě.
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;
Tady je soubor výsledků.
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. Řadit všechny řádky ve výsledné množině
Následující příklad vrací 10 nejlepších zaměstnanců seřazených podle jejich platu. Protože klauzule PARTITION BY není specifikována, funkce RANK se aplikuje na všechny řádky ve výsledné množině.
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;
Tady je soubor výsledků.
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říklady: Azure Synapse Analytics a Analytický platformový systém (PDW)
C: Řazení řádků v rámci oddílu
Následující příklad řadí obchodní zástupce v každé prodejní oblasti podle jejich celkového prodeje. Řádková sada je rozdělena a SalesTerritoryGroup seřazena podle 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;
Tady je soubor výsledků.
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