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.
Vonatkozik a következőkre:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analitikai Platform System (PDW)
SQL adatbázis a Microsoft Fabric-ben
A rendezett partíció sorait egy megadott számú csoportra osztja el. A csoportok számozása eggyel kezdődik. Minden sor esetében annak a csoportnak a számát adja vissza, NTILE amelyhez a sor tartozik.
Transact-SQL szintaxis konvenciók
Szemantika
NTILE (integer_expression) OVER ( [ <partition_by_clause> ] <order_by_clause> )
Arguments
integer_expression
Pozitív egész szám kifejezés, amely meghatározza azoknak a csoportoknak a számát, amelyekbe az egyes partíciókat fel kell osztani. integer_expression lehet int vagy bigint típusú.
<partition_by_clause>
A FROM záradék és a JOIN, APPLY, PIVOT záradék által előállított eredményhalmazt olyan partíciókra osztja, amelyekre a függvényt alkalmazza. A szintaxisért lásd a PARTITION BYSELECT – OVER záradékot.
<order_by_clause>
Meghatározza, hogy az NTILE értékek milyen sorrendben legyenek hozzárendelve egy partíció soraihoz. Az egész számok nem jelölhetnek oszlopokat, ha a <order_by_clause> egy rangsorolási függvényben használják.
Visszatérési típusok
bigint
Megjegyzések
Ha egy partíció sorainak száma nem osztható integer_expression szerint, ez két, egy tagonként eltérő méretű csoportot eredményez. A nagyobb csoportok a záradékban OVER megadott sorrendben kisebb csoportok elé kerülnek. Ha például a sorok teljes száma 53, a csoportok száma pedig öt, akkor az első három csoport 11 sort, a fennmaradó két csoportot pedig 10 sorból áll. Ha viszont a sorok teljes száma osztható a csoportok számával, akkor a sorok egyenlően oszlanak el a csoportok között. Ha például a sorok teljes száma 50, és öt csoport van, minden gyűjtő 10 sort tartalmaz.
NTILE nemdeterminista. További információ: Determinisztikus és nemdeterminista függvények.
Példák
A cikkben szereplő kódminták a AdventureWorks2025AdventureWorksDW2025 kezdőlapjáról letölthető adatbázist vagy mintaadatbázist használják.
Megjegyzés:
Az alábbi példákban a KONVERTÁLÁS függvény az adatokat pénznemként formázza SalesYTD .
A. Sorok felosztása csoportokra
Az alábbi példa az alkalmazottak négy csoportjára osztja a sorokat az éves értékesítésük alapján. Mivel a sorok teljes száma nem osztható el a csoportok számával, az első két csoport négy sorból áll, a többi csoport pedig három sorból áll.
USE AdventureWorks2022;
GO
SELECT p.FirstName,
p.LastName,
NTILE(4) OVER (ORDER BY SalesYTD DESC) AS Quartile,
CONVERT (NVARCHAR (20), s.SalesYTD, 1) AS 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;
GO
Itt van az eredmények összessége.
FirstName LastName Quartile SalesYTD PostalCode
------------- --------------------- --------- -------------- ----------
Linda Mitchell 1 4,251,368.55 98027
Jae Pak 1 4,116,871.23 98055
Michael Blythe 1 3,763,178.18 98027
Jillian Carson 1 3,189,418.37 98027
Ranjit Varkey Chudukatil 2 3,121,616.32 98055
José Saraiva 2 2,604,540.72 98055
Shu Ito 2 2,458,535.62 98055
Tsvi Reiter 2 2,315,185.61 98027
Rachel Valdez 3 1,827,066.71 98055
Tete Mensa-Annan 3 1,576,562.20 98055
David Campbell 3 1,573,012.94 98055
Garrett Vargas 4 1,453,719.47 98027
Lynn Tsoflias 4 1,421,810.92 98055
Pamela Ansman-Wolfe 4 1,352,577.13 98027
B. Az eredményhalmaz osztása a PARTITION BY használatával
Az alábbi példa hozzáadja az PARTITION BY argumentumot a kódhoz az A példában. A sorok először particionálva PostalCode lesznek, majd négy csoportra vannak osztva mindegyiken PostalCodebelül. A példa egy változót @NTILE_Var is deklarál, és ezt a változót használja a integer_expression paraméter értékének megadásához.
USE AdventureWorks2022;
GO
DECLARE @NTILE_Var AS INT = 4;
SELECT p.FirstName,
p.LastName,
NTILE(@NTILE_Var) OVER (PARTITION BY PostalCode ORDER BY SalesYTD DESC) AS Quartile,
CONVERT (NVARCHAR (20), s.SalesYTD, 1) AS 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;
GO
Itt van az eredmények összessége.
FirstName LastName Quartile SalesYTD PostalCode
------------ -------------------- -------- ------------ ----------
Linda Mitchell 1 4,251,368.55 98027
Michael Blythe 1 3,763,178.18 98027
Jillian Carson 2 3,189,418.37 98027
Tsvi Reiter 2 2,315,185.61 98027
Garrett Vargas 3 1,453,719.47 98027
Pamela Ansman-Wolfe 4 1,352,577.13 98027
Jae Pak 1 4,116,871.23 98055
Ranjit Varkey Chudukatil 1 3,121,616.32 98055
José Saraiva 2 2,604,540.72 98055
Shu Ito 2 2,458,535.62 98055
Rachel Valdez 3 1,827,066.71 98055
Tete Mensa-Annan 3 1,576,562.20 98055
David Campbell 4 1,573,012.94 98055
Lynn Tsoflias 4 1,421,810.92 98055
Példák: Azure Synapse Analytics and Analytics Platform System (PDW)
C. Sorok felosztása csoportokra
Az alábbi példa az értékesítők egy csoportját négy csoportra osztja fel a NTILE 2003-ra vonatkozó hozzárendelt értékesítési kvótájuk alapján. Mivel a sorok teljes száma nem osztható el a csoportok számával, az első csoportnak öt sora van, a többi csoportnak pedig négy sora van.
-- Uses AdventureWorks
SELECT e.LastName,
NTILE(4) OVER (ORDER BY SUM(SalesAmountQuota) DESC) AS Quartile,
CONVERT (VARCHAR (13), SUM(SalesAmountQuota), 1) AS SalesQuota
FROM dbo.DimEmployee AS e
INNER JOIN dbo.FactSalesQuota AS sq
ON e.EmployeeKey = sq.EmployeeKey
WHERE sq.CalendarYear = 2003
AND SalesTerritoryKey IS NOT NULL
AND SalesAmountQuota <> 0
GROUP BY e.LastName
ORDER BY Quartile, e.LastName;
Itt van az eredmények összessége.
LastName Quartile SalesYTD
----------------- -------- ------------
Blythe 1 4,716,000.00
Carson 1 4,350,000.00
Mitchell 1 4,682,000.00
Pak 1 5,142,000.00
Varkey Chudukatil 1 2,940,000.00
Ito 2 2,644,000.00
Saraiva 2 2,293,000.00
Vargas 2 1,617,000.00
Ansman-Wolfe 3 1,183,000.00
Campbell 3 1,438,000.00
Mensa-Annan 3 1,481,000.00
Valdez 3 1,294,000.00
Abbas 4 172,000.00
Albert 4 651,000.00
Jiang 4 544,000.00
Tsoflias 4 867,000.00
D. Az eredményhalmaz osztása a PARTITION BY használatával
Az alábbi példa hozzáadja az PARTITION BY argumentumot a kódhoz az A példában. A sorok először particionálva SalesTerritoryCountry lesznek, majd két csoportra vannak osztva mindegyiken SalesTerritoryCountrybelül. A ORDER BY záradékban OVERNTILE az ORDER BY utasítás az eredményhalmazt rendeli SELECT meg.
-- Uses AdventureWorks
SELECT e.LastName,
NTILE(2) OVER (PARTITION BY e.SalesTerritoryKey ORDER BY SUM(SalesAmountQuota) DESC) AS Quartile,
CONVERT (VARCHAR (13), SUM(SalesAmountQuota), 1) AS SalesQuota,
st.SalesTerritoryCountry
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 sq.CalendarYear = 2003
GROUP BY e.LastName, e.SalesTerritoryKey, st.SalesTerritoryCountry
ORDER BY st.SalesTerritoryCountry, Quartile;
Itt van az eredmények összessége.
LastName Quartile SalesYTD SalesTerritoryCountry
----------------- -------- -------------- ------------------
Tsoflias 1 867,000.00 Australia
Saraiva 1 2,293,000.00 Canada
Varkey Chudukatil 1 2,940,000.00 France
Valdez 1 1,294,000.00 Germany
Alberts 1 651,000.00 NA
Jiang 1 544,000.00 NA
Pak 1 5,142,000.00 United Kingdom
Mensa-Annan 1 1,481,000.00 United States
Campbell 1 1,438,000.00 United States
Reiter 1 2,768,000.00 United States
Blythe 1 4,716,000.00 United States
Carson 1 4,350,000.00 United States
Mitchell 1 4,682,000.00 United States
Vargas 2 1,617,000.00 Canada
Abbas 2 172,000.00 NA
Ito 2 2,644,000.00 United States
Ansman-Wolfe 2 1,183,000.00 United States