Udostępnij za pośrednictwem


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.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

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