Menu
Coddy logo textTech

PARTITION BY criterion

Teil des Abschnitts Grundlagen der SQL-Journey von Coddy — Lektion 59 von 72.

Eine weitere Option für die OVER ()-Klausel ist PARTITION BY

Es ermöglicht uns, die Zeilen für jede Gruppe separat zu nummerieren 

Zum Beispiel:

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

Dies erzeugt eine Spalte, die jeden Typ innerhalb seiner Gruppe nummeriert:

idtyperow_num
132t11
52t21
92t12
154t31
198t13

id 92 hat row_num 2, weil es die zweite Zeile von type t1 ist, wenn nach id sortiert wird.

Hinweis: ROW_NUMBER() erfordert eine ORDER BY-Klausel innerhalb der OVER(), um zu bestimmen, wie Zeilen innerhalb jeder Partition nummeriert werden sollen.

Wir können sogar mehrere Spalten innerhalb des PARTITION BY angeben:

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

Aufgabe

Einfach

Verfügbare Tabellen und Spalten:

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

Eine Fabrik baut Türen. Sie muss die Türen für jede country und color Kombination nummerieren, die ein publication_year kleiner als 2000 haben. Nennen Sie diese Spalte row_num.

Die Türen sollen innerhalb jeder Gruppe in aufsteigender Reihenfolge nach ihrer id nummeriert werden. Türen ohne Spezifikationen sollten ignoriert werden. Sortieren Sie das endgültige Ergebnis in aufsteigender Reihenfolge nach der id

Spickzettel

Verwenden Sie PARTITION BY in der OVER() Klausel, um Zeilen innerhalb von Gruppen zu nummerieren:

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

Sie können nach mehreren Spalten partitionieren:

ROW_NUMBER() OVER (PARTITION BY type, hue)

Probier es selbst

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen