トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
4-6 select文の結果のレコード件数を取得
SQLパズル
Table46から、Col1が5の倍数のレコードのCol1、Col2、Col3と、
select文の結果のレコード件数を取得する。
こちらを参考にさせていただきました
データ作成スクリプト
create table Table46(
Col1 number(3),
Col2 number(3),
Col3 number(3));
begin
for i in 1..100 Loop
insert into Table46 values(i,i*3,i*4);
end Loop;
commit;
end;
/
SQL
--■■■相関サブクエリを使う方法■■■
select Col1,Col2,Col3,
(select count(*) from Table46 where mod(Col1,5)=0) as RecordCount
from Table46
where mod(Col1,5)=0;
--■■■count(*) over()を使う方法■■■
select Col1,Col2,Col3,
count(*) over() as RecordCount
from Table46
where mod(Col1,5)=0;
--■■■group byのあるSQLでも文法エラーが発生しません(参考までに)■■■
select mod(Col1,5),count(*),
count(*) over() as RecordCount
from Table46
group by mod(Col1,5);
解説
select句でcount(*) over()とすると、select文の結果件数を取得できます
group byのあるSQLでも文法エラーが発生しません。
JDBC経由でのselect文の、レコード件数の取得に限らず、
PL/SQLでのカーソルforループでの、レコード件数の取得にも使えます。
select count(*) from Table46 where mod(Col1,5)=0;
を発行してから
select Col1,Col2,Col3 from Table46 where mod(Col1,5)=0;
を発行する方法は、
アンリピータブルリードやファントムリードが発生した場合に、
select count(*) from Table46 where mod(Col1,5)=0;の結果と
select Col1,Col2,Col3 from Table46 where mod(Col1,5)=0;の取得件数が一致しない可能性があります。
トランザクションの並列処理時に発生する問題