NTILE (Transact-SQL)
Rozdziela wiersze zamówione partycji do określonej liczby grup.Grupy są numerowane począwszy od jeden.Dla każdego wiersza NTILE zwraca liczbę grup, do której należy dany wiersz.
Składnia
NTILE (integer_expression) OVER ( [ <partition_by_clause> ] < order_by_clause > )
Argumenty
integer_expression
Jest dodatnią liczbą całkowitą stała wyrażenie określające liczbę grup, do których każda partycja musi być podzielona.integer_expressionmoże być typu int, lub bigint.Ostrzeżenie
integer_expressiontylko można odwoływać się do kolumn w PARTYCJI klauzula.integer_expressionnie można odwoływać się do kolumn wymienionych w bieżącym z klauzula.
<partition_by_clause>
Dzieli zestaw wyników produkowanych przez od klauzula na partycje, do której RANGA funkcja jest stosowana.Zobacz składnię PARTYCJI przez Klauzula OVER (Transact-SQL).<order_by_clause>
Określa kolejność przypisywania wartości NTILE do wierszy w partycji.Aby uzyskać więcej informacji, zobacz Klauzula ORDER BY (Transact-SQL).Liczba całkowita nie może reprezentować kolumna po <order_by_clause> używane w rankingu funkcja.
Zwracane typy
bigint
Uwagi
Jeśli liczba wierszy w partycji nie jest podzielna przez integer_expression, spowoduje to grupy dwóch rozmiarach, które różnią się przez jednego element członkowski.Większych grup są dostarczane przed mniejszych grup w kolejności określonej przez ponad klauzula.Dla przykładu, jeśli całkowita liczba wierszy jest 53 i liczbę grup jest pięć, pierwsze trzy grupy będzie miał 11 wierszy i będzie miał dwie pozostałe grupy 10 wierszy każdego.Jeżeli z drugiej strony całkowita liczba wierszy jest podzielna przez liczbę grup, wierszy zostanie równomiernie rozmieszczona wśród grup.Na przykład jeśli całkowita liczba wierszy jest 50 i ma pięć grup, każdy Wiadro z farbą zawiera 10 wierszy.
Przykłady
A.Dzielenie wierszy na grupy
Poniższy przykład dzieli wiersze na cztery grupy.Ponieważ całkowita liczba wierszy nie jest podzielna przez liczbę grup, pierwsza grupa ma cztery wiersze i pozostałe grupy mają trzy wiersze.
USE AdventureWorks2008R2;
GO
SELECT p.FirstName, p.LastName
,NTILE(4) OVER(ORDER BY SalesYTD DESC) AS 'Quartile'
,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s
INNER JOIN Person.Person p
ON s.BusinessEntityID = p.BusinessEntityID
INNER JOIN Person.Address a
ON a.AddressID = p.BusinessEntityID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0;
GO
B.Podzielenie zestaw wyników PARTYCJI przy użyciu
W następującym przykładzie dodano PARTITION BY argumentu kod w przykładzie A.Wiersze są najpierw podzielony na partycje przez PostalCode i następnie podzielone na cztery grupy w każdej PostalCode.Należy zauważyć, że ORDER BY w OVERzamówieńklauzula NTILE i ORDER BY z SELECTinstrukcja zamówienia, zestaw wyników.
USE AdventureWorks2008R2;
GO
SELECT p.FirstName, p.LastName
,NTILE(4) OVER(PARTITION BY PostalCode ORDER BY SalesYTD DESC) AS 'Quartile'
,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s
INNER JOIN Person.Person p
ON s.BusinessEntityID = p.BusinessEntityID
INNER JOIN Person.Address a
ON a.AddressID = p.BusinessEntityID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0
ORDER BY LastName;
GO