Probleem:
U wilt het aantal rijen beperken dat voortkomt uit een query in Oracle.
Voorbeeld:
In het exam
tabel, zijn er namen van de studenten met de resultaten van het examen.
naam | exam_result |
---|---|
Janet Morgen | 9 |
Taya Bain | 11 |
Anne Johnson | 11 |
Josh Kaur | 10 |
Ellen Thornton | 8 |
U wilt de drie rijen met de beste examenresultaten krijgen.
Oplossing 1:
SELECT * FROM ( SELECT * FROM exam ORDER BY exam_result DESC ) WHERE ROWNUM <= 3;
Het resultaat van de zoekopdracht ziet er als volgt uit:
naam | exam_result |
---|---|
Taya Bain | 11 |
Anne Johnson | 11 |
Josh Kaur | 10 |
Discussie:
In de FROM
clausule, gebruik dan een subquery die de rijen sorteert op exam_result
kolom in aflopende volgorde.
SELECT * FROM exam ORDER BY exam_result DESC
Schrijf in de hoofdquery een voorwaarde dat het aantal rijen kleiner dan of gelijk moet zijn aan 3
. Gebruik ROWNUM (het rijnummer) om dit te doen. Om ervoor te zorgen dat u alleen de eerste drie rijen ziet, heeft u een voorwaarde nodig dat het rijnummer kleiner of gelijk moet zijn aan 3
.
WHERE ROWNUM <= 3
U hebt een subquery nodig om de rijen te sorteren. Als u willekeurig drie rijen wilt in plaats van de beste drie, schrijft u gewoon de tabelnaam in plaats van de subquery.
SELECT * FROM exam WHERE ROWNUM <= 3;
Kijk uit! Dit werkt niet als u op zoek bent naar rijen met een getal dat groter is dan een bepaalde waarde (bijvoorbeeld ROWNUM > 2
zal geen rijen retourneren.)