0Pricing
Coding Interview Prep · Leçon

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 Coding 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 Coding Interview Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Coding 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 et NTILE(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 Coding Interview Prep, passe à CoddyKit PRO. Le cours Coding 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 Coding 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 Coding Interview Prep ?

Aucune expérience préalable n'est requise. Coding 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 Coding Interview Prep ?

Oui. Chaque leçon Coding 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

  1. LAG et LEAD pour les lignes adjacentes
  2. Évolution d’une période à l’autre
  3. NTILE pour créer des tranches
  4. FIRST_VALUE, LAST_VALUE et limites de fenêtre
← Retour à Coding Interview Prep