Menu
Coddy logo textTech

PARTITION BY criterion

Fait partie de la section Les fondamentaux du Journey SQL de Coddy — leçon 59 sur 72.

Une autre option pour la clause OVER () est PARTITION BY

Elle nous permet de numéroter les lignes pour chaque groupe séparément 

Par exemple :

idtype
132t1
52t2
92t1
154t3
198t1
SELECT id, type, ROW_NUMBER() OVER (PARTITION BY type ORDER BY id) as row_num
FROM table1

Cela générera une colonne qui numérotera chaque type au sein de lui-même :

idtyperow_num
132t11
52t21
92t12
154t31
198t13

id 92 a row_num 2 car il s'agit de la deuxième ligne de type t1 lorsqu'on ordonne par id.

Remarque : ROW_NUMBER() nécessite une clause ORDER BY au sein de OVER() pour déterminer comment numéroter les lignes au sein de chaque partition.

Nous pouvons même spécifier plusieurs colonnes dans le PARTITION BY :

ROW_NUMBER() OVER (PARTITION BY type, hue ORDER BY id)
challenge icon

Défi

Facile

Tables et colonnes disponibles :

  • <strong>doors</strong>: <strong>id</strong>, <strong>publication_year</strong>
  • <strong>doors_specs</strong>: <strong>id</strong>, <strong>country</strong>, <strong>color</strong>

Une usine fabrique des portes. Elle doit numéroter les portes pour chaque combinaison de country et color qui ont un publication_year inférieur à 2000. Nommez cette colonne row_num.

Les portes doivent être numérotées au sein de chaque groupe par ordre croissant de leur id. Les portes sans spécifications doivent être ignorées. Triez le résultat final par ordre croissant du id

Aide-mémoire

Utilisez PARTITION BY dans la OVER() clause pour numéroter les lignes au sein des groupes :

SELECT id, type, ROW_NUMBER() OVER (PARTITION BY type) as row_num
FROM table1

Vous pouvez partitionner par plusieurs colonnes :

ROW_NUMBER() OVER (PARTITION BY type, hue)

Essayez vous-même

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Les fondamentaux