sql >> Databáze >  >> RDS >> Oracle

Jak omezit výsledky v Oracle

Problém:

Chcete omezit počet řádků vyplývajících z dotazu v Oracle.

Příklad:

V exam tabulka, jsou tam jména studentů s výsledky zkoušky.

name výsledek_zkoušky
Janet Morgen 9
Taya Bain 11
Anne Johnson 11
Josh Kaur 10
Ellen Thornton 8

Chcete získat tři řádky s nejlepšími výsledky testu.

Řešení 1:

SELECT *
FROM (
  SELECT *
  FROM exam
  ORDER BY exam_result DESC
)
WHERE ROWNUM <= 3;

Výsledek dotazu vypadá takto:

name výsledek_zkoušky
Taya Bain 11
Anne Johnson 11
Josh Kaur 10

Diskuse:

V FROM klauzule, použijte poddotaz, který třídí řádky podle exam_result sloupec v sestupném pořadí.

SELECT *
FROM exam
ORDER BY exam_result DESC

V hlavním dotazu napište podmínku, že počet řádků by měl být menší nebo roven 3 . Použijte k tomu ROWNUM (číslo řádku). Chcete-li mít jistotu, že uvidíte pouze první tři řádky, potřebujete podmínku, že číslo řádku by mělo být menší nebo rovno 3 .

WHERE ROWNUM <= 3

K řazení řádků potřebujete poddotaz. Pokud byste chtěli tři řádky náhodně místo nejlepších tří, jednoduše napište název tabulky místo poddotazu.

SELECT *
FROM exam
WHERE ROWNUM <= 3;

Dávej si pozor! Toto nebude fungovat, když hledáte řádky s číslem větším než nějaká hodnota (například ROWNUM > 2 nevrátí žádné řádky.)


  1. Jak ELT() funguje v MariaDB

  2. Funkce RPAD() v Oracle

  3. Syntaxe SQL CREATE TABLE – Zobrazeno podle DBMS

  4. 2 způsoby, jak vrátit Juliánský den v SQLite