Problema:
Vuoi limitare il numero di righe risultanti da una query in Oracle.
Esempio:
Nell'exam tabella, ci sono i nomi degli studenti con i risultati dell'esame.
| nome | risultato_esame |
|---|---|
| Janet Morgen | 9 |
| Taya Bain | 11 |
| Anna Johnson | 11 |
| Josh Kaur | 10 |
| Ellen Thornton | 8 |
Vuoi ottenere le tre righe con i migliori risultati dell'esame.
Soluzione 1:
SELECT * FROM ( SELECT * FROM exam ORDER BY exam_result DESC ) WHERE ROWNUM <= 3;
Il risultato della query è simile al seguente:
| nome | risultato_esame |
|---|---|
| Taya Bain | 11 |
| Anna Johnson | 11 |
| Josh Kaur | 10 |
Discussione:
Nel FROM clausola, utilizzare una sottoquery che ordina le righe in base a exam_result colonna in ordine decrescente.
SELECT * FROM exam ORDER BY exam_result DESC
Nella query principale, scrivi una condizione che il numero di righe sia minore o uguale a 3 . Usa ROWNUM (il numero di riga) per farlo. Per assicurarti di vedere solo le prime tre righe, è necessaria una condizione che il numero di riga sia minore o uguale a 3 .
WHERE ROWNUM <= 3
Hai bisogno di una sottoquery solo per ordinare le righe. Se desideri tre righe casuali invece delle tre migliori, scrivi semplicemente il nome della tabella invece della sottoquery.
SELECT * FROM exam WHERE ROWNUM <= 3;
Attento! Questo non funzionerà quando cerchi righe con un numero maggiore di un valore (ad esempio, ROWNUM > 2 non restituirà alcuna riga.)