Udostępnij za pośrednictwem


NTILE (języka Transact-SQL)

Wiersze w partycji zamówione rozsyła do określonej liczby grup.Grupy są numerowane począwszy od jednego.Dla każdego wiersza NTILE zwraca liczbę grup, do której należy dany wiersz.

Topic link iconKonwencje składni języka Transact-SQL

NTILE (integer_expression)    OVER ( [ <partition_by_clause> ] < order_by_clause > )

Argumenty

  • integer_expression
    Is a positive integer constant expression that specifies the number of groups into which each partition must be divided.integer_expression can be of type int, or bigint.

    Uwaga

    integer_expression can only reference columns in the PARTITION BY clause.integer_expression cannot reference columns listed in the current FROM clause.

  • <partition_by_clause>
    Dzieli zestaw wyników, wyprodukowane przez Z klauzula na partycje, do którego POZYCJA funkcja jest stosowana.Aby zapoznać się ze składnią PARTITION BY zobacz W klauzula (języka Transact-SQL).

  • < order_by_clause >
    Określa kolejność, w którym wartości NTILE są przypisane do wierszy w partycji.Aby uzyskać więcej informacji zobaczORDER BY Clause (Transact-SQL).Liczba całkowita nie może reprezentować kolumna po <order_by_clause> używany w funkcja klasyfikacji.

Zwracane typy

bigint

Remarks

Jeśli nie jest podzielić przez liczbę wierszy w partycji integer_expression, spowoduje to, że grupy dwóch rozmiarów, które różnią się przez jednego element członkowski członkowski. Przed mniejszych grup w kolejności określonej przez klauzulę OVER są dostarczane większych grup.Na przykład jeśli całkowita liczba wierszy jest 53 i liczbę grup jest pięć, pierwsze trzy grupy będą miały 11 wierszy i będzie miał dwa pozostałe grupy 10 poszczególnych wierszy.Jeśli całkowita liczba wierszy jest z drugiej strony podzielić przez liczbę grup, wiersze będą się równomiernie między grupami.Na przykład jeśli całkowita liczba wierszy jest 50, a nie ma pięć grup, każdy pakiet będzie zawierać 10 wierszy.

Przykłady

A.Podział wierszy na grupy

W poniższym przykładzie dzieli wiersze na cztery grupy.Całkowita liczba wierszy nie jest podzielić przez liczbę grup, pierwsza grupa ma cztery wiersze, a pozostałe grupy, mają trzy wiersze.

USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName
    ,NTILE(4) OVER(ORDER BY SalesYTD DESC) AS 'Quartile'
    ,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s 
    INNER JOIN Person.Contact c 
        ON s.SalesPersonID = c.ContactID
    INNER JOIN Person.Address a 
        ON a.AddressID = c.ContactID
WHERE TerritoryID IS NOT NULL 
    AND SalesYTD <> 0;
GO

B.Podzielenie wyniku zestaw przy użyciu PARTITION BY

W następującym przykładzie dodano PARTITION BY Argument ten kod w przykładzie A. Wiersze są najpierw podzielony na partycje przez PostalCode a następnie podzielić na cztery grupy w ramach każdej PostalCode. Zwróć uwagę, że ORDER BY w OVER Klauzula zamówień NTILE oraz ORDER BY z SELECT Instrukcja zamówień zestaw wyników.

USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName
    ,NTILE(4) OVER(PARTITION BY PostalCode ORDER BY SalesYTD DESC) AS 'Quartile'
    ,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s 
    INNER JOIN Person.Contact c 
        ON s.SalesPersonID = c.ContactID
    INNER JOIN Person.Address a 
        ON a.AddressID = c.ContactID
WHERE TerritoryID IS NOT NULL 
    AND SalesYTD <> 0
ORDER BY LastName;
GO