sql >> Database >  >> RDS >> Oracle

Oracle rownum-gedrag met mod-functie

ROWNUM wordt niet toegewezen totdat u een query uitvoert, dus u kunt het niet gebruiken in een WHERE zo'n clausule.

U kunt het volgende doen:

SELECT COUNT(*) 
FROM
(
  select v1, v2, rownum rn
  from Foo 
) f
WHERE mod(rn,2) = 0;

De ROWNUM is de positie van de rij in de resultatenset en wordt geëvalueerd nadat de records zijn geselecteerd.

Dit soort zoekopdrachten zullen nooit werken:

WHERE ROWNUM > x
WHERE ROWNUM BETWEEN x AND y

Maar dit zal werken

WHERE ROWNUM < x

Aangezien u de rownum . wilt evalueren met de mod functie zal het niet werken omdat het rownum is op dat moment niet beschikbaar. Daarom zou je het in een subquery moeten plaatsen om de mod . te gebruiken functie.



  1. Tel het aantal dagen tussen 2 datums in JPA

  2. Oracle-databaseverbinding in web.config asp.net

  3. Python verbinden met een Heroku PostgreSQL DB?

  4. Groeperen op sql-query op door komma's samengevoegde kolom