Problém:
Chcete omezit počet řádků vyplývajících z dotazu v Oracle.
Příklad:
V exam tabulka, jsou tam jména studentů s výsledky zkoušky.
| name | výsledek_zkoušky |
|---|---|
| Janet Morgen | 9 |
| Taya Bain | 11 |
| Anne Johnson | 11 |
| Josh Kaur | 10 |
| Ellen Thornton | 8 |
Chcete získat tři řádky s nejlepšími výsledky testu.
Řešení 1:
SELECT * FROM ( SELECT * FROM exam ORDER BY exam_result DESC ) WHERE ROWNUM <= 3;
Výsledek dotazu vypadá takto:
| name | výsledek_zkoušky |
|---|---|
| Taya Bain | 11 |
| Anne Johnson | 11 |
| Josh Kaur | 10 |
Diskuse:
V FROM klauzule, použijte poddotaz, který třídí řádky podle exam_result sloupec v sestupném pořadí.
SELECT * FROM exam ORDER BY exam_result DESC
V hlavním dotazu napište podmínku, že počet řádků by měl být menší nebo roven 3 . Použijte k tomu ROWNUM (číslo řádku). Chcete-li mít jistotu, že uvidíte pouze první tři řádky, potřebujete podmínku, že číslo řádku by mělo být menší nebo rovno 3 .
WHERE ROWNUM <= 3
K řazení řádků potřebujete poddotaz. Pokud byste chtěli tři řádky náhodně místo nejlepších tří, jednoduše napište název tabulky místo poddotazu.
SELECT * FROM exam WHERE ROWNUM <= 3;
Dávej si pozor! Toto nebude fungovat, když hledáte řádky s číslem větším než nějaká hodnota (například ROWNUM > 2 nevrátí žádné řádky.)