Masalah:
Anda ingin membatasi jumlah baris yang dihasilkan dari kueri di Oracle.
Contoh:
Dalam exam
tabel, ada nama siswa dengan hasil ujian.
nama | hasil_ujian |
---|---|
Janet Morgen | 9 |
Taya Bain | 11 |
Anne Johnson | 11 |
Josh Kaur | 10 |
Ellen Thornton | 8 |
Anda ingin mendapatkan tiga baris dengan hasil ujian terbaik.
Solusi 1:
SELECT * FROM ( SELECT * FROM exam ORDER BY exam_result DESC ) WHERE ROWNUM <= 3;
Hasil querynya seperti ini:
nama | hasil_ujian |
---|---|
Taya Bain | 11 |
Anne Johnson | 11 |
Josh Kaur | 10 |
Diskusi:
Dalam FROM
klausa, gunakan subquery yang mengurutkan baris berdasarkan exam_result
kolom dalam urutan menurun.
SELECT * FROM exam ORDER BY exam_result DESC
Dalam kueri utama, tulis kondisi bahwa jumlah baris harus kurang dari atau sama dengan 3
. Gunakan ROWNUM (nomor baris) untuk melakukannya. Untuk memastikan Anda hanya akan melihat tiga baris pertama, Anda memerlukan ketentuan bahwa nomor baris harus kurang dari atau sama dengan 3
.
WHERE ROWNUM <= 3
Anda memerlukan subquery hanya untuk mengurutkan baris. Jika Anda ingin tiga baris secara acak alih-alih tiga yang terbaik, tulis saja nama tabelnya, bukan subkuerinya.
SELECT * FROM exam WHERE ROWNUM <= 3;
Hati-Hati! Ini tidak akan berfungsi saat Anda mencari baris dengan angka yang lebih besar dari beberapa nilai (misalnya, ROWNUM > 2
tidak akan mengembalikan baris apa pun.)