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
Ez a függvény minden sor rangját adja vissza az eredményhalmaz partíción belül, nincs rés a rangsorolási értékekben. Egy adott sor rangja egy plusz a különböző rangértékek száma, amelyek az adott sor előtt helyezkednek el.
Transact-SQL szintaxis konvenciók
Szemantika
DENSE_RANK ( ) OVER ( [ <partition_by_clause> ] < order_by_clause > )
Arguments
<partition_by_clause>
Először a FROM klauzula által generált eredményhalmazt osztjuk partíciókra, majd a DENSE_RANK függvényt minden partícióra alkalmazzuk. Lásd az OVER (Transact-SQL ) záradékot PARTITION BY a szintaxisért.
<order_by_clause>
Meghatározza a függvény sorainak sorrendjét DENSE_RANK a partícióban.
Visszatérési típusok
bigint
Megjegyzések
Ha két vagy több sor azonos rangértékkel rendelkezik ugyanabban a partícióban, mindegyik sor ugyanazt a rangot kapja. Például, ha a két legjobb értékesítőnek ugyanaz a SalesYTD értéke, mindkettőjüknek egy rangértéke lesz. A következő legmagasabb SalesYTD-vel rendelkező értékesítőnek két rangértéke lesz. Ez eggyel meghaladja a sort előtti különálló sorok számát. Ezért a függvény által visszaadott DENSE_RANK számoknak nincs hézag, és mindig egymást követő rangértékek vannak.
Az egész lekérdezéshez használt rendezési sorrend határozza meg az eredményhalmaz sorainak sorrendjét. Ez azt jelenti, hogy egy első sorrendben lévő sor nem feltétlenül az első sor a partíción.
DENSE_RANK nemdeterminista. További információért lásd Determinisztikus és nemdeterminisztikus függvényeket .
Példák
A. Sorok rangsorolása egy partíción belül
Ez a példa a készletben lévő termékeket a megadott készlethelyek szerint sorolja a mennyiségük szerint.
DENSE_RANKfelosztja az eredményhalmazt a-valLocationID, és logikusan sorolja az eredményhalmazt .Quantity Figyeld meg, hogy a 494 és 495 termékek ugyanannyi mennyiséget tartalmaznak. Mivel mindkettőnek ugyanaz a mennyiségi értéke, mindkettőjüknek egy rangértéke van.
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
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 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. Az összes sor rangsorolása egy eredményhalmazban
Ez a példa a tíz legjobb alkalmazottat adja vissza, fizetésük szerint rangsorolva. Mivel az SELECT állítás nem határozott meg klauzulatot PARTITION BY , a DENSE_RANK függvény minden eredményhalmaz-sorra alkalmazódott.
USE AdventureWorks2022;
GO
SELECT TOP(10) BusinessEntityID, Rate,
DENSE_RANK() OVER (ORDER BY Rate DESC) AS RankBySalary
FROM HumanResources.EmployeePayHistory;
Itt van az eredmények összessége.
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. Négy rangsorolási függvény ugyanabban a lekérdezésben
Ez a példa a négy rangsorolási függvényt mutatja
ugyanabban a lekérdezésben használták. Lásd az egyes rangsorsorolási függvényeket specifikus példákért.
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;
Itt van az eredmények összessége.
| Keresztnév | Vezetéknév | Sorszám | Helyezés | Sűrű rang | Kvartilis | SalesYTD | Irányítószám |
|---|---|---|---|---|---|---|---|
| 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 |
| Padlásszoba | 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 |
| Dávid | Campbell | 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 | Vörös | 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 |
Példák: Azure Synapse Analytics and Analytics Platform System (PDW)
D: Sorok rangsorolása egy partíción belül
Ez a példa az értékesítési területek értékesítési képviselőit az összes eladásuk alapján rangsorolja.
DENSE_RANKa sorhalmazt felosztja SalesTerritoryGroup, és az eredményhalmazt .SalesAmountQuota
-- 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;
Itt van az eredmények összessége.
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
Lásd még:
RETT (Transact-SQL)
ROW_NUMBER (Transact-SQL)
NTILE (Transact-SQL)
Rangsorolási függvények (Transact-SQL)
Funkciók