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

Chování Oracle rownum s funkcí mod

ROWNUM není přiřazeno, dokud nezadáte dotaz, takže jej nebudete moci použít v WHERE taková klauzule.

Můžete provést následující:

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

ROWNUM je pozice řádku v sadě výsledků a je vyhodnocena po výběru záznamů.

Tyto typy dotazů nebudou nikdy fungovat:

WHERE ROWNUM > x
WHERE ROWNUM BETWEEN x AND y

Ale to bude fungovat

WHERE ROWNUM < x

Protože chcete vyhodnotit rownum pomocí mod funkce to nebude fungovat, protože rownum v daném okamžiku není k dispozici. To je důvod, proč byste jej museli umístit do dílčího dotazu, abyste mohli použít mod funkce.



  1. Parametrizovaný dotaz Oracle v c#

  2. předání pole jako parametru k použití v dotazu SQL pomocí příkazu IN

  3. Použít alias sloupce ve výpočtu vybraného příkazu Oracle SQL

  4. Jak mohu vygenerovat SQL dotaz pomocí SQL::Abstract?