Проблем:
Искате да ограничите броя на редовете в резултат на заявка в 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
няма да върне никакви редове.)