Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So begrenzen Sie Ergebnisse in Oracle

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.)