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