0Pricing
SQL Academy · Leçon

Clauses de fenêtre : ROWS ou RANGE

Choisissez entre les clauses de fenêtre ROWS BETWEEN et RANGE BETWEEN et comprenez comment chacune gère les doublons et les intervalles manquants.

Clauses de fenêtre : ROWS ou RANGE est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 1 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 Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.

Le cadre à l'intérieur de OVER

Une fonction de fenêtre s'évalue sur un cadre — un sous-ensemble de lignes de la partition. Le cadre est défini par :

OVER (
  PARTITION BY ...
  ORDER BY ...
  ROWS BETWEEN <start> AND <end>     -- or RANGE BETWEEN ...
)

Cadre par défaut

Si vous indiquez ORDER BY sans cadre, la valeur par défaut est :

RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
-- "From the first row up to all rows tied with the current row".

ROWS compte physiquement

ROWS compte N lignes dans l'ordre de la partition, quelle que soit leur valeur :

SUM(x) OVER (ORDER BY day ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
-- The current row plus the previous 2.  Exactly 3 rows.

RANGE compte selon la valeur

RANGE compte les lignes dont la valeur ORDER BY se trouve dans une fenêtre autour de la valeur actuelle :

SUM(x) OVER (
  ORDER BY day
  RANGE BETWEEN INTERVAL '2 days' PRECEDING AND CURRENT ROW
)
-- All rows within 2 days (by calendar) of the current row.

Pourquoi cette distinction est importante

En présence de lacunes dans les données, ROWS et RANGE donnent des résultats différents :

-- Days: 1, 3, 5 (no 2 or 4)
-- ROWS BETWEEN 2 PRECEDING AND CURRENT ROW for day 5: rows 1,3,5 = 3 days
-- RANGE BETWEEN INTERVAL '2 days' PRECEDING for day 5: only days 3,5 = 2 days

Cadre GROUPS (PG 11+)

GROUPS compte les groupes de pairs (valeurs à égalité pour ORDER BY) plutôt que les lignes individuelles :

SUM(x) OVER (
  ORDER BY tier
  GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW
)
-- "The current tier and the previous tier" — useful when ORDER BY has many ties.

Limites du cadre

  • UNBOUNDED PRECEDING — première ligne de la partition
  • n PRECEDING
  • CURRENT ROW
  • n FOLLOWING
  • UNBOUNDED FOLLOWING — dernière ligne

Total cumulé

Somme depuis le début jusqu'à la ligne actuelle :

SUM(x) OVER (ORDER BY day ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
-- Same as the default frame.

Fenêtre glissante vers le passé

La moyenne glissante sur N jours :

AVG(revenue) OVER (
  ORDER BY day
  ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS avg_7d

Fenêtre centrée

Regarder dans les deux directions :

AVG(revenue) OVER (
  ORDER BY day
  ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
) AS centred_7d

La surprise de LAST_VALUE

Avec le cadre par défaut, LAST_VALUE renvoie la ligne actuelle, et non la dernière ligne de la partition. Utilisez un cadre explicite non borné :

LAST_VALUE(name) OVER (
  PARTITION BY group ORDER BY day
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)

Clause EXCLUDE (PG 11+)

Ignorer certaines lignes du cadre :

SUM(x) OVER (
  ORDER BY day
  ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
  EXCLUDE CURRENT ROW
)
-- All previous 6 days but not today.

Récapitulatif

Les clauses de cadre permettent de contrôler précisément les fenêtres.

  • ROWS — nombre de lignes physiques
  • RANGE — intervalle fondé sur les valeurs
  • GROUPS — groupes de pairs
  • Le cadre par défaut peut surprendre — soyez explicite

Vérification rapide

Vous avez des revenus quotidiens avec des jours manquants. Quel cadre donne « toutes les lignes des 7 jours calendaires précédant maintenant » ?

Questions Fréquemment Posées

La leçon « Clauses de fenêtre : ROWS ou RANGE » est-elle gratuite ?

Oui — le texte complet de « Clauses de fenêtre : ROWS ou RANGE » 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 Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Clauses de fenêtre : ROWS ou RANGE » ?

Choisissez entre les clauses de fenêtre ROWS BETWEEN et RANGE BETWEEN et comprenez comment chacune gère les doublons et les intervalles manquants. Tu pratiques SQL Academy 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 Academy ?

Aucune expérience préalable n'est requise. SQL Academy 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 1 sur 4.

Combien de temps prend la leçon « Clauses de fenêtre : ROWS ou RANGE » ?

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 Academy ?

Oui. Chaque leçon SQL Academy 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. Clauses de fenêtre : ROWS ou RANGE
  2. Lag et lead avec des fenêtres de lignes
  3. Regroupement avec NTILE et Cume_Dist
  4. Modèles de rapports du monde réel
← Retour à SQL Academy