Problem:
Du vil begrænse antallet af rækker, der kommer fra en forespørgsel i Oracle.
Eksempel:
I exam
tabel, er der navne på eleverne med resultaterne af eksamen.
navn | eksamen_resultat |
---|---|
Janet Morgen | 9 |
Taya Bain | 11 |
Anne Johnson | 11 |
Josh Kaur | 10 |
Ellen Thornton | 8 |
Du ønsker at få de tre rækker med de bedste eksamensresultater.
Løsning 1:
SELECT * FROM ( SELECT * FROM exam ORDER BY exam_result DESC ) WHERE ROWNUM <= 3;
Resultatet af forespørgslen ser således ud:
navn | eksamen_resultat |
---|---|
Taya Bain | 11 |
Anne Johnson | 11 |
Josh Kaur | 10 |
Diskussion:
I FROM
klausul, brug en underforespørgsel, der sorterer rækkerne efter exam_result
kolonne i faldende rækkefølge.
SELECT * FROM exam ORDER BY exam_result DESC
I hovedforespørgslen skal du skrive en betingelse om, at antallet af rækker skal være mindre end eller lig med 3
. Brug ROWNUM (rækkenummeret) til at gøre det. For at sikre, at du kun kan se de første tre rækker, skal du have en betingelse om, at rækkenummeret skal være mindre end eller lig med 3
.
WHERE ROWNUM <= 3
Du skal bruge en underforespørgsel bare for at sortere rækkerne. Hvis du gerne vil have tre rækker tilfældigt i stedet for de bedste tre, skal du blot skrive tabelnavnet i stedet for underforespørgslen.
SELECT * FROM exam WHERE ROWNUM <= 3;
Pas på! Dette fungerer ikke, når du leder efter rækker med et tal, der er større end en værdi (f.eks. ROWNUM > 2
returnerer ingen rækker.)