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 Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analitik Platform Sistemi (PDW)
Microsoft Fabric'te SQL veritabanı
Sıralı bir bölümdeki satırları belirtilen sayıda gruba dağıtır. Gruplar numaralandırılır ve bunlardan biri başlar. Her satır için, NTILE satırın ait olduğu grubun sayısını döndürür.
Transact-SQL söz dizimi kuralları
Sözdizimi
NTILE (integer_expression) OVER ( [ <partition_by_clause> ] <order_by_clause> )
Arguments
integer_expression
Her bölümün bölünmesi gereken grup sayısını belirten pozitif bir tamsayı ifadesi. integer_expressionint veya bigint türünde olabilir.
<partition_by_clause>
FROM yan tümcesi artı JOIN, APPLY, PIVOT yan tümcesi tarafından üretilen sonuç kümesini işlevin uygulandığı bölümlere böler. Söz dizimi için PARTITION BY bkz. SELECT - OVER yan tümcesi.
<order_by_clause>
Değerlerin bir bölümdeki NTILE satırlara atanma sırasını belirler. Bir sıralama işlevinde <order_by_clause> kullanıldığında bir tamsayı sütunu temsil edebilir.
Dönüş türleri
bigint
Açıklamalar
Bir bölümdeki satır sayısı integer_expression göre bölünemiyorsa, bu durum bir üyeye göre farklılık gösteren iki boyutlu gruplara neden olur. Büyük gruplar, yan tümcesi tarafından belirtilen sırada daha küçük gruplara gelir OVER . Örneğin, toplam satır sayısı 53 ve grup sayısı beş ise, ilk üç grubun 11 satırı ve kalan iki grubun her biri 10 satırı vardır. Diğer taraftan, toplam satır sayısı grup sayısına göre bölünebiliyorsa, satırlar gruplar arasında eşit olarak dağıtılır. Örneğin, toplam satır sayısı 50 ise ve beş grup varsa, her demet 10 satır içerir.
NTILE belirsiz değildir. Daha fazla bilgi için bkz . Deterministic ve nondeterministic functions.
Örnekler
Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz veya AdventureWorksDW2025 örnek veritabanını kullanır.
Uyarı
Aşağıdaki örneklerde, convert işlevi verileri para birimi olarak biçimlendirmek SalesYTD için kullanılır.
A. Satırları gruplara bölme
Aşağıdaki örnek satırları, yıllık satışlarına göre dört çalışan grubuna böler. Toplam satır sayısı grup sayısına göre bölünemediğinden, ilk iki grubun dört satırı ve kalan grupların her birinde üç satır vardır.
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
Sonuç kümesi aşağıdadır.
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. PARTITION BY kullanarak sonuç kümesini bölme
Aşağıdaki örnek, A örneğindeki koda bağımsız değişkenini ekler PARTITION BY . Satırlar önce tarafından PostalCode bölümlenir ve ardından her PostalCodeiçinde dört gruba ayrılır. Örnek ayrıca bir değişken @NTILE_Var bildirir ve integer_expression parametresinin değerini belirtmek için bu değişkeni kullanır.
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
Sonuç kümesi aşağıdadır.
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
Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)
C. Satırları gruplara bölme
Aşağıdaki örnek, 2003 yılı için atanan satış kotasına göre bir satış temsilcisi kümesini dört gruba bölmek için işlevini kullanır NTILE . Toplam satır sayısı grup sayısına göre bölünemediğinden, ilk grubun beş satırı ve kalan grupların her birinde dört satır vardır.
-- 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;
Sonuç kümesi aşağıdadır.
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. PARTITION BY kullanarak sonuç kümesini bölme
Aşağıdaki örnek, A örneğindeki koda bağımsız değişkenini ekler PARTITION BY . Satırlar önce tarafından SalesTerritoryCountry bölümlenir ve ardından her SalesTerritoryCountryiçinde iki gruba ayrılır.
ORDER BY in yan tümcesiOVER, deyiminin NTILE ve ORDER BYSELECT öğesini sipariş ederek sonuç kümesini sıralar.
-- 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;
Sonuç kümesi aşağıdadır.
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