メインコンテンツへスキップ
メインコンテンツへスキップ

OFFSET FETCH 句

OFFSETFETCH を使用すると、データを部分ごとに取得できます。これらの句で、単一のクエリで取得する行の範囲を指定します。

OFFSET offset_row_count {ROW | ROWS}] [FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} {ONLY | WITH TIES}]

offset_row_count または fetch_row_count の値には、数値またはリテラル定数を指定できます。fetch_row_count は省略可能で、省略した場合のデフォルト値は 1 です。

OFFSET は、クエリ結果セットから行を返し始める前にスキップする行数を指定します。OFFSET n は、結果から先頭の n 行をスキップします。

負の OFFSET がサポートされています: OFFSET -n は結果の末尾の n 行をスキップします。

小数の OFFSET もサポートされています: OFFSET n — 0 < n < 1 の場合、結果の先頭の n * 100% の行がスキップされます。

例: • OFFSET 0.1 - 結果の先頭 10% をスキップします。

Note • OFFSET に指定する小数値は、1 未満かつ 0 より大きい Float64 型の数値でなければなりません。 • 計算結果として行数が小数になった場合は、次の整数値へ切り上げられます。

FETCH は、クエリの結果に含めることができる最大行数を指定します。

ONLY オプションは、OFFSET によってスキップされた行の直後に続く行のみを返すために使用されます。この場合、FETCHLIMIT 句の代替となります。たとえば、次のクエリでは

SELECT * FROM test_fetch ORDER BY a OFFSET 1 ROW FETCH FIRST 3 ROWS ONLY;

クエリと同じです

SELECT * FROM test_fetch ORDER BY a LIMIT 3 OFFSET 1;

WITH TIES オプションは、ORDER BY 句に従った結果セットにおいて、最後の行と同じ順位になる追加の行も返すために使用されます。たとえば、fetch_row_count が 5 に設定されているものの、5 行目と同じ ORDER BY 列の値を持つ行がさらに 2 行ある場合、結果セットには合計 7 行が含まれます。

:::note
標準仕様では、OFFSET 句と FETCH 句の両方が存在する場合、OFFSET 句は FETCH 句より前に記述しなければなりません。 :::

:::note
実際のオフセット値は、offset 設定にも依存する場合があります。 :::

入力テーブル:

┌─a─┬─b─┐
│ 1 │ 1 │
│ 2 │ 1 │
│ 3 │ 4 │
│ 1 │ 3 │
│ 5 │ 4 │
│ 0 │ 6 │
│ 5 │ 7 │
└───┴───┘

ONLY オプションの利用方法:

SELECT * FROM test_fetch ORDER BY a OFFSET 3 ROW FETCH FIRST 3 ROWS ONLY;

結果:

┌─a─┬─b─┐
│ 2 │ 1 │
│ 3 │ 4 │
│ 5 │ 4 │
└───┴───┘

WITH TIES オプションの使用方法:

SELECT * FROM test_fetch ORDER BY a OFFSET 3 ROW FETCH FIRST 3 ROWS WITH TIES;

結果:

┌─a─┬─b─┐
│ 2 │ 1 │
│ 3 │ 4 │
│ 5 │ 4 │
│ 5 │ 7 │
└───┴───┘