Hypothetische Setfunktionen
Beispiel für eine hypothetische Setfunktion:
SELECT grp, percent_rank(1500) WITHIN GROUP(ORDER BY sal)
percent_rankPR, rank(1500) WITHIN GROUP(ORDER BY sal) rank, COUNT(*)
FROM salary_info GROUP BY grp (ORDER BY grp);
GRP PR RANK COUNT(*)
--- --- ---- --------
1 0.0000000000000000 1 2
2 1.0000000000000000 5 4
3 0.5000000000000000 3 4
(3 rows)
Ermitteln wir nun die Schritte. Sehen Sie sich die Daten aus der Tabelle "salary_info" an:
GRP A SAL
--- -- ----
1 1 3000
1 2 3000
2 3 800
2 4 950
2 5 1100
2 6 1300
3 7 1250
3 8 1250
3 9 1500
3 10 1600
Für die Gruppe mit dem GRP-Wert 3 sieht das nach dem Spaltenwert geordnete “sal”-Set folgendermaßen aus: {1250, 1250, 1500, 1600}. Das Argument von percent_rank gibt eine hypothetische Zeile an. Diese wird dem Set “sal” hinzugefügt. Jetzt sieht das geordnete “sal”-Set folgendermaßen aus: {1250, 1250, 1500, 1500, 1600}.
percent_rank(1500) ist (Rang von “1500” im “sal”-Set -1)/ (Anzahl Zeilen in Gruppe -1) = 3 – 1 / 4 = 2/4 = 0.5
Beispiel für eine hypothetische Setfunktion mit mehreren Argumenten:
SELECT region, rank(1800, 15) WITHIN GROUP(ORDER BY amt,
profit_margin), dense_rank(1800, 15) WITHIN GROUP(ORDER BY amt,
profit_margin) FROM sales_tbl GROUP BY region;
REGION | RANK | DENSE_RANK
---------- +------+------------
Central | 5 | 4
Northeast | 3 | 3
Northwest | 1 | 1
Southwest | 1 | 1
(4 rows)