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