sql >> Databasteknik >  >> RDS >> Oracle

Hur man begränsar resultat i Oracle

Problem:

Du vill begränsa antalet rader som kommer från en fråga i Oracle.

Exempel:

I exam tabell, det finns namn på eleverna med resultaten av tentamen.

namn exam_result
Janet Morgen 9
Taya Bain 11
Anne Johnson 11
Josh Kaur 10
Ellen Thornton 8

Du vill få de tre raderna med de bästa provresultaten.

Lösning 1:

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

Resultatet av frågan ser ut så här:

namn exam_result
Taya Bain 11
Anne Johnson 11
Josh Kaur 10

Diskussion:

I FROM sats, använd en underfråga som sorterar raderna efter exam_result kolumn i fallande ordning.

SELECT *
FROM exam
ORDER BY exam_result DESC

Skriv ett villkor i huvudfrågan att antalet rader ska vara mindre än eller lika med 3 . Använd ROWNUM (radnumret) för att göra det. För att vara säker på att du bara ser de tre första raderna behöver du ett villkor att radnumret ska vara mindre än eller lika med 3 .

WHERE ROWNUM <= 3

Du behöver en underfråga bara för att sortera raderna. Om du vill ha tre rader slumpmässigt istället för de tre bästa, skriv helt enkelt tabellnamnet istället för underfrågan.

SELECT *
FROM exam
WHERE ROWNUM <= 3;

Se upp! Detta kommer inte att fungera när du letar efter rader med ett nummer som är större än något värde (till exempel ROWNUM > 2 kommer inte att returnera några rader.)


  1. MySQL dynamisk pivot

  2. Läsbara sekundärer på en budget

  3. Oracles standarddatumformat är ÅÅÅÅ-MM-DD, VARFÖR?

  4. Hur man bakåtkonstruerar en databas i MySQL Workbench