Problem:
Chcesz ograniczyć liczbę wierszy wynikających z zapytania w Oracle.
Przykład:
Na exam
w tabeli znajdują się nazwiska uczniów z wynikami egzaminu.
nazwa | exam_result |
---|---|
Janet Morgen | 9 |
Taya Bain | 11 |
Anna Johnson | 11 |
Josh Kaur | 10 |
Ellen Thornton | 8 |
Chcesz uzyskać trzy wiersze z najlepszymi wynikami egzaminu.
Rozwiązanie 1:
SELECT * FROM ( SELECT * FROM exam ORDER BY exam_result DESC ) WHERE ROWNUM <= 3;
Wynik zapytania wygląda tak:
nazwa | exam_result |
---|---|
Taya Bain | 11 |
Anna Johnson | 11 |
Josh Kaur | 10 |
Dyskusja:
W FROM
klauzuli, użyj podzapytania, które sortuje wiersze według exam_result
kolumna w kolejności malejącej.
SELECT * FROM exam ORDER BY exam_result DESC
W głównym zapytaniu napisz warunek, że liczba wierszy powinna być mniejsza lub równa 3
. Użyj ROWNUM (numer wiersza), aby to zrobić. Aby mieć pewność, że zobaczysz tylko pierwsze trzy wiersze, potrzebujesz warunku, że numer wiersza powinien być mniejszy lub równy 3
.
WHERE ROWNUM <= 3
Potrzebujesz podzapytania tylko do sortowania wierszy. Jeśli chcesz losowo wybrać trzy wiersze zamiast trzech najlepszych, po prostu wpisz nazwę tabeli zamiast podzapytania.
SELECT * FROM exam WHERE ROWNUM <= 3;
Uważaj! To nie zadziała, gdy szukasz wierszy z liczbą większą niż pewna wartość (na przykład ROWNUM > 2
nie zwróci żadnych wierszy.)