Problem:
Du vill begränsa antalet rader som kommer från en fråga i Oracle.
Exempel:
I exam
tabell, det finns namn på eleverna med resultaten av tentamen.
namn | exam_result |
---|---|
Janet Morgen | 9 |
Taya Bain | 11 |
Anne Johnson | 11 |
Josh Kaur | 10 |
Ellen Thornton | 8 |
Du vill få de tre raderna med de bästa provresultaten.
Lösning 1:
SELECT * FROM ( SELECT * FROM exam ORDER BY exam_result DESC ) WHERE ROWNUM <= 3;
Resultatet av frågan ser ut så här:
namn | exam_result |
---|---|
Taya Bain | 11 |
Anne Johnson | 11 |
Josh Kaur | 10 |
Diskussion:
I FROM
sats, använd en underfråga som sorterar raderna efter exam_result
kolumn i fallande ordning.
SELECT * FROM exam ORDER BY exam_result DESC
Skriv ett villkor i huvudfrågan att antalet rader ska vara mindre än eller lika med 3
. Använd ROWNUM (radnumret) för att göra det. För att vara säker på att du bara ser de tre första raderna behöver du ett villkor att radnumret ska vara mindre än eller lika med 3
.
WHERE ROWNUM <= 3
Du behöver en underfråga bara för att sortera raderna. Om du vill ha tre rader slumpmässigt istället för de tre bästa, skriv helt enkelt tabellnamnet istället för underfrågan.
SELECT * FROM exam WHERE ROWNUM <= 3;
Se upp! Detta kommer inte att fungera när du letar efter rader med ett nummer som är större än något värde (till exempel ROWNUM > 2
kommer inte att returnera några rader.)