特定のクエリでrownum条件なしで返される行数を知りたい:
SELECT columns
, [number of rows before applying rownum] AS numberofrows
FROM tables
WHERE conditions
AND rownum < 100
サブクエリを使わなくても可能ですか?
COUNT()
ネストされたクエリでの分析バージョンを使用できます。たとえば、次のようになります。
SELECT * FROM
(
SELECT table_name,
COUNT(*) OVER() AS numberofrows
FROM all_tables
WHERE owner = 'SYS'
ORDER BY table_name
)
WHERE rownum < 10;
rownum
フィルターの前にオーダーバイを適用して一貫した結果を得るには、とにかくネストする必要があります。そうしないと、ランダムな(っぽい)行のセットが得られます。
rownum
分析ROW_NUMBER()
関数に置き換えることもできます。
SELECT table_name, cnt FROM
(
SELECT table_name,
COUNT(*) OVER () AS numberofrows,
ROW_NUMBER() OVER (ORDER BY table_name) AS rn
FROM all_tables
WHERE owner = 'SYS'
)
WHERE rn < 10;
2 つのクエリを実行する必要があります。最初にセットのサイズを見つけ、次にデータを見つけます。
select count(*) from tables where conditions;
それから2つ目。
セットを注文する前に、別の選択にラップすることに注意してください
select * from (select columns from tables where conditions order by columns) rownum < 100
.
その場合は、条件付き集計を使用します。
select sum(case when conditions then 1 else 0 end) as NumWithConditions,
count(*) as Total
from tables;