NTILE (Transact-SQL)

Actualizado: 17 de julio de 2006

Distribuye las filas de una partición ordenada en un número especificado de grupos. Los grupos se numeran a partir del uno. Para cada fila, NTILE devuelve el número del grupo al que pertenece la fila.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

  • integer_expression
    Es una expresión constante de tipo entero positivo que especifica el número de grupos en que se debe dividir cada partición. integer_expression puede ser de tipo int o bigint.

    [!NOTA] integer_expression sólo puede hacer referencia a columnas de la cláusula PARTITION BY. integer_expression no puede hacer referencia a columnas incluidas en la cláusula FROM actual.

  • <partition_by_clause>
    Divide el conjunto de resultados generado por la cláusula FROM en particiones a las que se aplica la función RANK. Para la sintaxis de PARTITION BY, vea OVER (cláusula de Transact-SQL).
  • < order_by_clause >
    Determina el orden en que los valores NTILE se asignan a las filas de una partición. Para obtener más información, vea ORDER BY (cláusula de Transact-SQL). Un entero no puede representar una columna cuando se usa la cláusula <order_by_clause> en una función de categoría.

Tipos de valor devueltos

bigint

Notas

Si el número de filas de una partición no es divisible por integer_expression, esto producirá grupos de dos tamaños que difieren en un miembro. Los grupos de mayor tamaño preceden a los grupos de menor tamaño en el orden especificado por la cláusula OVER. Por ejemplo, si el número total de filas es 53 y el número de grupos es cinco, los tres primeros grupos tienen 11 filas y los otros dos grupos tienen 10 filas cada uno. Por otra parte, si el número total de filas es divisible por el número de grupos, las filas se distribuyen por igual entre los grupos. Por ejemplo, si el número total de filas es 50 y hay cinco grupos, cada grupo contiene 10 filas.

Ejemplos

A. Dividir filas en grupos

En el siguiente ejemplo las filas se dividen en cuatro grupos. Dado que el número total de filas no es divisible por el número de grupos, el primer grupo tiene cuatro filas y los grupos restantes tienen tres filas cada uno.

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. Dividir el conjunto de resultados mediante PARTITION BY

En el ejemplo siguiente se agrega el argumento PARTITION BY al código del ejemplo A. Primero se dividen por PostalCode y, a continuación, en cuatro grupos dentro de cada PostalCode. Observe que ORDER BY de la cláusula OVER ordena NTILE y ORDER BY de la instrucción SELECT ordena el conjunto de resultados.

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

Vea también

Referencia

RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
ROW_NUMBER (Transact-SQL)
Funciones de categoría (Transact-SQL)
Funciones (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005