Проблем:
Искате да ограничите броя на редовете в резултат на заявка в Oracle.
Пример:
В exam таблица, има имена на студентите с резултатите от изпита.
| name | резултат_изпит |
|---|---|
| Джанет Морген | 9 |
| Тая Бейн | 11 |
| Ан Джонсън | 11 |
| Джош Каур | 10 |
| Елън Торнтън | 8 |
Искате да получите трите реда с най-добри резултати от изпита.
Решение 1:
SELECT * FROM ( SELECT * FROM exam ORDER BY exam_result DESC ) WHERE ROWNUM <= 3;
Резултатът от заявката изглежда така:
| name | резултат_изпит |
|---|---|
| Тая Бейн | 11 |
| Ан Джонсън | 11 |
| Джош Каур | 10 |
Дискусия:
В FROM клауза, използвайте подзаявка, която сортира редовете по exam_result колона в низходящ ред.
SELECT * FROM exam ORDER BY exam_result DESC
В основната заявка напишете условие, че броят на редовете трябва да бъде по-малък или равен на 3 . Използвайте ROWNUM (номера на реда), за да го направите. За да сте сигурни, че ще виждате само първите три реда, имате нужда от условие номерът на реда да е по-малък или равен на 3 .
WHERE ROWNUM <= 3
Нуждаете се от подзаявка само за сортиране на редовете. Ако искате три реда произволно вместо най-добрите три, просто напишете името на таблицата вместо подзаявката.
SELECT * FROM exam WHERE ROWNUM <= 3;
Внимавай! Това няма да работи, когато търсите редове с число, по-голямо от някаква стойност (например ROWNUM > 2 няма да върне никакви редове.)