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