NTILE pour créer des tranches
Répartir les lignes en quartiles et en tranches de percentiles
NTILE pour créer des tranches est une leçon SQL Interview Prep gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Interview Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Interview Prep comprend 4 leçons au total.
Quand vous avez besoin de groupes de taille égale
Les recruteurs demandent : « Répartissez les clients en quatre groupes de dépenses de taille égale » ou « Dans quel décile se trouve chaque ligne ? » L'outil à utiliser est NTILE.
NTILE(n) répartit les lignes ordonnées en n groupes aussi uniformément que possible et associe à chaque ligne le numéro de son groupe, de 1 à n. Cette leçon explique comment la répartition s'effectue, comment les nombres de lignes inégaux sont gérés et en quoi cette fonction diffère du classement.
Syntaxe de base de NTILE
Appliquer NTILE(4) à des lignes triées selon une valeur produit des quartiles. Comme toutes les fonctions de fenêtre, cette fonction nécessite une clause OVER ; le ORDER BY intérieur détermine quelles lignes se retrouvent dans les groupes inférieurs ou supérieurs.
Un tri croissant place les plus petites valeurs dans le groupe 1 ; un tri décroissant inverse le résultat.
SELECT
customer_id,
total_spend,
NTILE(4) OVER (ORDER BY total_spend) AS spend_quartile
FROM customers;Comment NTILE répartit les lignes
Avec 12 lignes et NTILE(4), chaque groupe reçoit exactement 12 / 4 = 3 lignes. Le groupe 1 contient les 3 valeurs les plus faibles et le groupe 4 les 3 valeurs les plus élevées.
L'idée essentielle est la suivante : NTILE répartit selon le nombre de lignes, et non selon des intervalles de valeurs. Deux groupes peuvent couvrir des intervalles de valeurs très différents, à condition de contenir le même nombre de lignes.
Répartition inégale
Que se passe-t-il si le nombre de lignes ne se divise pas exactement ? Avec 10 lignes et NTILE(4), 10 / 4 = 2, reste 2. NTILE donne les lignes supplémentaires aux premiers groupes.
- Groupe 1 : 3 lignes
- Groupe 2 : 3 lignes
- Groupe 3 : 2 lignes
- Groupe 4 : 2 lignes
La taille des groupes ne diffère donc jamais de plus d'une ligne, et les groupes les plus grands sont les premiers. Cette règle précise est souvent demandée en entretien.
NTILE ignore les égalités de valeurs
Piège important : NTILE ne conserve pas les valeurs égales dans le même groupe. La répartition se fait par position ; deux lignes dont le total_spend est identique peuvent donc se retrouver dans des groupes différents, uniquement en fonction de l'ordre des lignes.
Si l'activité exige que les valeurs égales appartiennent au même niveau, NTILE n'est pas le bon outil ; vous devez utiliser une approche fondée sur les valeurs. Les recruteurs tendent délibérément ce piège.
Déciles et percentiles
Le nombre de groupes correspond simplement au nombre que vous transmettez. NTILE(10) produit des déciles et NTILE(100) des tranches de percentiles. C'est ainsi que les analystes répartissent les utilisateurs en niveaux de performance ou en catégories de risque.
Le résultat est le numéro du groupe ; une valeur située dans le groupe 9 de NTILE(10) se trouve dans le deuxième décile en partant du haut.
SELECT
user_id,
score,
NTILE(10) OVER (ORDER BY score DESC) AS decile
FROM leaderboard;Groupes par partition
Ajoutez PARTITION BY pour effectuer la répartition indépendamment dans chaque groupe, par exemple pour calculer les quartiles de dépenses par région. Chaque région recommence au groupe 1.
Cela permet de répondre à des questions comme « quels sont les clients du quartile supérieur dans chaque région ? », même une région dont les dépenses globales sont faibles possède alors son propre groupe 4.
SELECT
region,
customer_id,
total_spend,
NTILE(4) OVER (
PARTITION BY region
ORDER BY total_spend DESC
) AS regional_quartile
FROM customers;Filtrer un niveau précis
Vous ne pouvez pas placer directement NTILE(...) dans une clause WHERE ; les fonctions de fenêtre sont calculées après WHERE. Encapsulez la requête dans un CTE ou une sous-requête, puis filtrez sur la colonne du groupe.
Ce modèle, « donnez-moi les clients dépensant le plus, dans le quartile supérieur », est la manière la plus courante dont NTILE apparaît dans une réponse concrète.
WITH q AS (
SELECT customer_id, total_spend,
NTILE(4) OVER (ORDER BY total_spend DESC) AS quartile
FROM customers
)
SELECT customer_id, total_spend
FROM q
WHERE quartile = 1;NTILE et percentiles fondés sur les valeurs
NTILE répartit les lignes en groupes contenant le même nombre de lignes. Si vous avez plutôt besoin d'un véritable percentile statistique, c'est-à-dire de la valeur au 90e percentile, utilisez PERCENTILE_CONT ou PERCENTILE_DISC.
- NTILE(100) : le groupe de percentiles auquel appartient une ligne, selon sa position dans le classement.
- PERCENTILE_CONT(0.9) : la valeur réelle au 90e percentile.
Connaître cette distinction permet de donner une réponse assurée plutôt que de deviner.
Quand ORDER BY est important
NTILE exige un ORDER BY à l'intérieur de OVER ; les groupes n'ont aucun sens sans ordre défini. Le sens du tri détermine quelle extrémité devient le groupe 1.
Si des valeurs égales rendent l'affectation ambiguë et que le groupe exact d'une ligne à la limite est important, ajoutez une colonne servant à départager les égalités dans le tri afin d'obtenir des résultats déterministes et reproductibles.
Nommer les groupes
Les numéros de groupe bruts (1, 2, 3, 4) constituent rarement le résultat final. Les analystes les associent généralement à des libellés métier comme Faible, Moyen, Élevé et Supérieur au moyen d'une expression CASE appliquée au résultat de NTILE.
Calculez NTILE dans un CTE, puis traduisez le numéro dans la requête externe. La logique de fenêtre reste ainsi claire et la présentation du résultat est prête à l'emploi.
WITH q AS (
SELECT customer_id, total_spend,
NTILE(4) OVER (ORDER BY total_spend) AS bucket
FROM customers
)
SELECT customer_id, total_spend,
CASE bucket
WHEN 1 THEN 'Low'
WHEN 2 THEN 'Medium'
WHEN 3 THEN 'High'
WHEN 4 THEN 'Top'
END AS spend_tier
FROM q;Vérification rapide
Vérifiez la règle de répartition inégale.
Récapitulatif
NTILE répartit les lignes ordonnées en groupes contenant le même nombre de lignes :
NTILE(n)attribue aux lignes les numéros 1..n ;NTILE(4)produit des quartiles etNTILE(10)des déciles.- La répartition se fait selon le nombre de lignes, et non selon l'intervalle de valeurs ; les lignes supplémentaires sont attribuées aux premiers groupes.
- Les valeurs à égalité ne restent pas ensemble et la fonction ne peut pas être placée directement dans
WHERE. - Pour obtenir une véritable valeur de percentile, utilisez
PERCENTILE_CONT.
Ensuite : récupérer les valeurs aux limites avec FIRST_VALUE, LAST_VALUE et les limites du cadre de fenêtre.
Questions Fréquemment Posées
La leçon « NTILE pour créer des tranches » est-elle gratuite ?
Oui — le texte complet de « NTILE pour créer des tranches » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Interview Prep, passe à CoddyKit PRO. Le cours SQL Interview Prep comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « NTILE pour créer des tranches » ?
Répartir les lignes en quartiles et en tranches de percentiles Tu pratiques SQL Interview Prep avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Interview Prep ?
Aucune expérience préalable n'est requise. SQL Interview Prep sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « NTILE pour créer des tranches » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Interview Prep ?
Oui. Chaque leçon SQL Interview Prep inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- LAG et LEAD pour les lignes adjacentes
- Évolution d’une période à l’autre
- NTILE pour créer des tranches
- FIRST_VALUE, LAST_VALUE et limites de fenêtre