PARTITION BY ... in einer analytischen Funktion RANK

oraclin25

Erfahrenes Mitglied
Hallo zusammen,

die meisten Beispiel im Internet ist lediglich eine Spalte als Argument für die Option PARTITION BY. Beispiel:

Code:
RANK() OVER (PARTITION BY name ORDER BY iterationColumn) as rang

In diesem Fall wird der Rang also per name kategorisiert. Jeder distinkte Name kriegt also eine Rangliste.

Ich frage mich, was würde eine weitere Spalte bewirken?
Code:
RANK() OVER (PARTITION BY vorname, nachname ORDER BY iterationColumn) as rang

Würde hier der Rang quasi nach vorname||nachname kategorisiert? Also, Beispiel(angenommen die Tabelle ist komplett):

vorname nachname iterationColumn rang

ratna mueller 10 2
ratna kowitzky 1 1
ratna kowitzky 4 2
ratna kowitzky 5 3
ratna mueller 2 2
ratna mueller 1 3

Der Rank wird also nach:
1. ratna mueller
2. ratna kowitzky
kategorisiert, oder?

Vielen Dank für Eure Hilfe.

Schöne Grüße aus Rheinland,
Eure Ratna:)

PS. ich kann selbst leider nicht testen, da ich nicht mehr vorm Rechner mit dem Zugriff auf die Datenbank sitze.
 
Hi,

Bei deinem ersten Code ist unklar was du meinst. Vorname oder Nachname? Ich nehme mal an Vorname. Name gibt es ja gemäss deiner Table Def gar nicht...

Beispiel 1 wird also pro Vorname eine Rangliste erstellen. Wohingegen Beispiel 2 eine Rangliste pro Vorname UND Nachnahme erzeugt. Hier ist die Partition kleiner als beim ersten Beispiel, weil du sie ja mit dem Nachnamen stärker einschränkst. Über alle Einträge gesehen gibt es beim Beispiel 1 genau eine Partition über alle Daten (nämlich ratna). Beim Beispiel 2 gibt es 2 Partitionen über alle Daten (ratna kowitzky und ratna mueller).
Somit ist dein Beispieloutput falsch. Innerhalb jeder Partition wird neu mit dem Ranking begonnen. Also bei 1. Deine Partition ratna mueller beginnt bereits bei 2. Das kann nicht sein. Und innerhalb der Partition sortierst du ja nach iterationColumn. Daher sollte logischerweise ratna mueller 1 den Rank 1 erhalten (innerhalb eben dieser Partition).

Ich hab dein Besipiel mal laufen lassen:

Beispiel 1
ratna kowitzky 1 1
ratna mueller 1 1
ratna mueller 2 3
ratna kowitzky 4 4
ratna kowitzky 5 5
ratna mueller 10 6

Beispiel 2
ratna kowitzky 1 1
ratna kowitzky 4 2
ratna kowitzky 5 3
ratna mueller 1 1
ratna mueller 2 2
ratna mueller 10 3


Nun solltest du schnell die Auswirkung der Partition erkennen.

Ich fand dieses Paper hier noch sehr interessant:
http://www.trivadis.com/uploads/tx_cabagdownloadarea/analytische_funktionen.pdf

Gruss
BBBB
 
Zurück