NTILE (Transact-SQL)

Mis à jour : 17 juillet 2006

Distribue les lignes d'une partition triée dans un nombre spécifié de groupes. Les groupes sont numérotés à partir de un. Pour chaque ligne, NTILE retourne le numéro du groupe auquel la ligne appartient.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

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

Arguments

  • integer_expression
    Expression constante dont la valeur est un entier positif qui spécifie le nombre de groupes utilisés pour diviser chaque partition. integer_expression peut être de type int ou bigint.

    ms175126.note(fr-fr,SQL.90).gifRemarque :
    L'argument integer_expression peut uniquement faire référence à des colonnes dans la clause PARTITION BY. integer_expression ne peut pas faire référence à des colonnes répertoriées dans la clause FROM actuelle.
  • <partition_by_clause>
    Divise l'ensemble de résultats généré par la clause FROM en partitions auxquelles la fonction RANK est appliquée. Pour connaître la syntaxe de PARTITION BY, consultez Clause OVER (Transact-SQL).
  • < order_by_clause >
    Détermine l'ordre dans lequel les valeurs de NTILE sont assignées aux lignes d'une partition. Pour plus d'informations, consultez Clause ORDER BY (Transact-SQL). Un entier ne peut pas représenter une colonne lorsque <order_by_clause> est utilisé dans une fonction de classement.

Notes

Si le nombre de lignes d'une partition n'est pas divisible par integer_expression, vous obtiendrez des groupes de deux tailles différentes qui diffèrent d'un membre. Les groupes plus grands viennent avant les groupes plus petits dans l'ordre spécifié par la clause OVER. Par exemple, si le nombre total de lignes est égal à 53 et qu'il y a 5 groupes, les trois premiers groupes contiendront 11 lignes et les deux derniers, 10 lignes. En revanche, si le nombre total de lignes est divisible par le nombre de groupes, les lignes seront réparties équitablement entre les différents groupes. Par exemple, si le nombre total de lignes est égal à 50 et qu'il y a 5 groupes, chacun d'eux contiendra 10 lignes.

Types de retour

bigint

Exemple

A. Division des lignes en groupes

L'exemple suivant divise les lignes en 4 groupes. Dans la mesure où le nombre total de lignes n'est pas divisible par le nombre de groupes, le premier groupe contient 4 lignes tandis que les autres en possèdent 3 chacun.

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. Division de l'ensemble de résultats à l'aide de PARTITION BY

L'exemple suivant ajoute l'argument PARTITION BY au code de l'exemple A. Les lignes sont d'abord partitionnées par PostalCode, puis divisées en 4 groupes à l'intérieur de chaque PostalCode. Notez que l'argument ORDER BY de la clause OVER détermine l'ordre des valeurs NTILE tandis que l'argument ORDER BY de l'instruction SELECT détermine l'ordre de l'ensemble de résultats.

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

Voir aussi

Référence

RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
ROW_NUMBER (Transact-SQL)
Fonctions de classement (Transact-SQL)
Fonctions (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005