Problem:
Sie möchten die Anzahl der Zeilen begrenzen, die sich aus einer Abfrage in Oracle ergeben.
Beispiel:
In der exam Tabelle, dort sind die Namen der Studenten mit den Ergebnissen der Prüfung.
| name | exam_result |
|---|---|
| Janet Morgen | 9 |
| Taya Bain | 11 |
| Anne Johnson | 11 |
| Josh Kaur | 10 |
| Ellen Thornton | 8 |
Sie möchten die drei Zeilen mit den besten Prüfungsergebnissen erhalten.
Lösung 1:
SELECT * FROM ( SELECT * FROM exam ORDER BY exam_result DESC ) WHERE ROWNUM <= 3;
Das Ergebnis der Abfrage sieht so aus:
| name | exam_result |
|---|---|
| Taya Bain | 11 |
| Anne Johnson | 11 |
| Josh Kaur | 10 |
Diskussion:
Im FROM -Klausel verwenden Sie eine Unterabfrage, die die Zeilen nach exam_result sortiert Spalte in absteigender Reihenfolge.
SELECT * FROM exam ORDER BY exam_result DESC
Schreiben Sie in die Hauptabfrage eine Bedingung, dass die Anzahl der Zeilen kleiner oder gleich 3 sein soll . Verwenden Sie dazu ROWNUM (die Zeilennummer). Um sicherzustellen, dass Sie nur die ersten drei Zeilen sehen, benötigen Sie eine Bedingung, dass die Zeilennummer kleiner oder gleich 3 sein muss .
WHERE ROWNUM <= 3
Sie benötigen eine Unterabfrage, nur um die Zeilen zu sortieren. Wenn Sie anstelle der besten drei zufällig drei Zeilen möchten, schreiben Sie einfach den Tabellennamen anstelle der Unterabfrage.
SELECT * FROM exam WHERE ROWNUM <= 3;
Achtung! Dies funktioniert nicht, wenn Sie nach Zeilen mit einer Zahl suchen, die größer als ein bestimmter Wert ist (z. B. ROWNUM > 2 gibt keine Zeilen zurück.)