[解決済み】Oracleクエリが順序付け後に返す行数を制限するにはどうすればいいですか?
2022-03-23 18:54:25
質問
を作成する方法はありますか?
Oracle
クエリの動作は、MySQL の
limit
節がありますか?
MySQLでは、こんなことができるんです。
select *
from sometable
order by name
limit 20,10
で、21行目から30行目までを取得します(最初の20行を飛ばして、次の10行を取得します)。行が選択されるのは
order by
そのため、アルファベット順で20番目の名前から始まります。
オラクルでは、みんなが口にするのは
rownum
擬似カラムが評価されるが
前に
order by
というのは、こういう意味です。
select *
from sometable
where rownum <= 10
order by name
は名前で並べられた10行のランダムなセットを返しますが、これは通常私が欲しいものではありません。また、オフセットを指定することもできません。
どのように解決するのですか?
サブクエリを使用することで、このようなことが可能になります。
select *
from
( select *
from emp
order by sal desc )
where ROWNUM <= 5;
トピックもご覧ください。 ROWNUMと結果の制限について にて、Oracle/AskTomの詳細情報をご確認ください。
更新情報 : 下限と上限の両方で結果を制限するために、以下のように少し肥大化します。
select * from
( select a.*, ROWNUM rnum from
( <your_query_goes_here, with order by> ) a
where ROWNUM <= :MAX_ROW_TO_FETCH )
where rnum >= :MIN_ROW_TO_FETCH;
(指定されたAskTom-articleからのコピーです。)
更新情報2 : Oracle 12c (12.1) からは、行を制限したり、オフセットで開始する構文が利用できるようになりました。
SELECT *
FROM sometable
ORDER BY name
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
参照 この回答 をご覧ください。ヒントをくださったKrumiaさんに感謝します。
関連
-
[解決済み】2つの列を分割する方法は?
-
[解決済み】SQLが単一グループのグループ関数でないこと
-
[解決済み】Teradata - 計算中に数値のオーバーフローが発生しました。
-
[解決済み] ORA-00920: 無効な関係演算子
-
[解決済み] PostgreSQL - json 型の等値演算子を識別できませんでした。
-
[解決済み] アクセスクエリーエラー(from句のシンタックスエラー)
-
[解決済み] クエリビルダーのSQLクエリを文字列として出力するにはどうすればよいですか?
-
[解決済み】MySQLはクエリでORDER BYとLIMITをどのように処理するのですか?
-
[解決済み】Oracleで複数行のカラム値を連結するSQLクエリ
-
[解決済み] LIMIT/OFFSETを指定してクエリを実行し、総行数を取得することも可能
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 列名または提供された値の数がテーブル定義と一致しない
-
[解決済み】「パラメータ@objnameがあいまいか、主張する@objtype(COLUMN)が間違っています」を解決するにはどうすればよいですか?[重複している]。
-
[解決済み] ERROR: 参照されたテーブル "bar" の与えられたキーに一致するユニークな制約がありません。
-
[解決済み】2つの列を分割する方法は?
-
[解決済み] テスト
-
[解決済み】ORA-01791: SELECTされた式ではない
-
[解決済み] PostgreSQL - json 型の等値演算子を識別できませんでした。
-
[解決済み] SQLで複数のGROUP BYを使用する場合とは?
-
[解決済み] Oracle SELECT TOP 10 レコード [重複]の場合
-
[解決済み】Oracleでトップ1を行うには?[重複しています]