sql >> Database >  >> RDS >> Oracle

Resultaten beperken in Oracle

Probleem:

U wilt het aantal rijen beperken dat voortkomt uit een query in Oracle.

Voorbeeld:

In het exam tabel, zijn er namen van de studenten met de resultaten van het examen.

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

U wilt de drie rijen met de beste examenresultaten krijgen.

Oplossing 1:

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

Het resultaat van de zoekopdracht ziet er als volgt uit:

naam exam_result
Taya Bain 11
Anne Johnson 11
Josh Kaur 10

Discussie:

In de FROM clausule, gebruik dan een subquery die de rijen sorteert op exam_result kolom in aflopende volgorde.

SELECT *
FROM exam
ORDER BY exam_result DESC

Schrijf in de hoofdquery een voorwaarde dat het aantal rijen kleiner dan of gelijk moet zijn aan 3 . Gebruik ROWNUM (het rijnummer) om dit te doen. Om ervoor te zorgen dat u alleen de eerste drie rijen ziet, heeft u een voorwaarde nodig dat het rijnummer kleiner of gelijk moet zijn aan 3 .

WHERE ROWNUM <= 3

U hebt een subquery nodig om de rijen te sorteren. Als u willekeurig drie rijen wilt in plaats van de beste drie, schrijft u gewoon de tabelnaam in plaats van de subquery.

SELECT *
FROM exam
WHERE ROWNUM <= 3;

Kijk uit! Dit werkt niet als u op zoek bent naar rijen met een getal dat groter is dan een bepaalde waarde (bijvoorbeeld ROWNUM > 2 zal geen rijen retourneren.)


  1. Oracle SqlPlus - uitvoer opslaan in een bestand maar niet op het scherm weergeven

  2. Oracle CASE kortsluiting werkt niet in groep door

  3. Serienummers per groep rijen voor samengestelde sleutel

  4. MySQL WAAR IN ()