martinbulinski.de

Die drei TOP-Verdiener ermitteln Drucken E-Mail
  
Freitag, 17. Oktober 2008 um 17:10

Wenn man aus einer Tabelle nur die ersten oder letzten zehn Datensätze sortiert erhalten möchte, muß man sich was einfallen lassen, denn anders als z.B. in mySQL gibt es bei ORACLE kein Offset oder Limit.

 

In jeder Tabelle existiert eine Pseudo-Spalte ROWNUM, die die gelieferten Datensätze beginnend mit 1 durchnummeriert.
Wichtig! Die ROWNUM wird also nur um 1 hochgezählt, wenn der Datensatz die WHERE-Bedingung des SQL-Statements erfüllt.

Das folgende Statement würde deshalb niemals einen Datensatz liefern, denn da es keinen ersten Datensatz gibt, der die Bedingung erfüllt, kann es auch keinen zweiten geben:

SQL> select * from emp where rownum > 1;

Um nun also die ersten drei Mitarbeiter aus der EMP-Tabelle zu ermitteln, könnte man formulieren:

SQL> select * from emp where rownum < 4;

Nun wollen wir aber die ersten drei TOP-Verdiener, also die, die am meisten verdienen. Einfach nur ein ORDER-BY anhängen, klappt nicht, denn zuerst wird ermittelt, welche Datensätze die WHERE-Bedingung erfüllen und erst dann wird sortiert. Wir würden also nach wie vor die ersten drei Datensätze erhalten, nach dem Gehalt sortiert.

Abhilfe schafft die sogenannte INLINE-VIEW: Wir sortieren die Datensätze vor, um in einem ‘äußeren’ Select die ersten drei Datensätze der sortierten Menge zu erhalten.

SQL> select * from (select * from emp order by sal desc) where rownum < 4;
Aktualisiert ( Samstag, 18. Oktober 2008 um 16:29 )
 
Benutzerbewertung: / 0
SchwachPerfekt 

Kommentar schreiben


Sicherheitscode
Aktualisieren

Anmeldung



Wer ist online

Wir haben 6 Gäste online