LIMIT 句は、クエリ結果として返される行数を制御します。
先頭の行を取得:
結果の先頭 m 行を返します。結果が m 行未満の場合は、すべてのレコードを返します。
TOP の代替構文 (MS SQL Server 互換) :
-- SELECT TOP 数値|パーセント カラム名 FROM テーブル名
SELECT TOP 10 * FROM numbers(100);
SELECT TOP 0.1 * FROM numbers(100);
これは LIMIT m と同等で、Microsoft SQL Server のクエリとの互換性のために使用できます。
OFFSET を指定した SELECT:
LIMIT m OFFSET n
-- または同等の表記:
LIMIT n, m
先頭のn行をスキップし、その次のm行を返します。
どちらの形式でも、nとmは 0 以上の整数である必要があります。
負の値を使用すると、result set の末尾から行を選択できます。
| 構文 | 結果 |
|---|
LIMIT -m | 末尾の m 行 |
LIMIT -m OFFSET -n | 末尾の n 行をスキップしたあとの末尾の m 行 |
LIMIT m OFFSET -n | 末尾の n 行をスキップしたあとの先頭の m 行 |
LIMIT -m OFFSET n | 先頭の n 行をスキップしたあとの末尾の m 行 |
LIMIT -n, -m 構文は LIMIT -m OFFSET -n と同等です。
0 から 1 の間の小数値を使用して、行の割合を指定できます。
| 構文 | 結果 |
|---|
LIMIT 0.1 | 先頭の 10% の行 |
LIMIT 1 OFFSET 0.5 | 中央の行 |
LIMIT 0.25 OFFSET 0.5 | 第3四分位数 (先頭の 50% をスキップした後の 25% の行) |
- 小数は、0 より大きく 1 より小さい Float64 値である必要があります。
- 小数で指定した行数は、次の整数に切り上げられます。
通常の整数と、小数または負の OFFSET を組み合わせて使用できます。
LIMIT 10 OFFSET 0.5 -- 中間地点から始まる10行
LIMIT 10 OFFSET -20 -- 最後の20行をスキップした後の10行
WITH TIES 修飾子は、制限された最後の行と同じ ORDER BY 値を持つ追加の行も含めます。
SELECT * FROM (
SELECT number % 50 AS n FROM numbers(100)
) ORDER BY n LIMIT 0, 5
┌─n─┐
│ 0 │
│ 0 │
│ 1 │
│ 1 │
│ 2 │
└───┘
WITH TIES を使用すると、最後の値と一致するすべての行が含まれます。
SELECT * FROM (
SELECT number % 50 AS n FROM numbers(100)
) ORDER BY n LIMIT 0, 5 WITH TIES
┌─n─┐
│ 0 │
│ 0 │
│ 1 │
│ 1 │
│ 2 │
│ 2 │
└───┘
6 行目は、5 行目と同じ値 (2) であるため含まれます。
OFFSET を OFFSET キーワードで指定した場合も同様です。
SELECT * FROM (
SELECT number % 50 AS n FROM numbers(100)
) ORDER BY n LIMIT 3 OFFSET 2 WITH TIES
┌─n─┐
│ 1 │
│ 1 │
│ 2 │
│ 2 │
└───┘
最初の2行をスキップして3行を取得すると、通常は 1, 1, 2 が返されますが、2つ目の 2 も最後の行と同順位のため含まれます。
WITH TIES は負の limit ではサポートされていません。
この修飾子は、ORDER BY ... WITH FILL 修飾子と組み合わせて使用できます。
非決定論的な結果: ORDER BY 句がない場合、返される行は不定であり、クエリを実行するたびに異なる可能性があります。
サーバー側の制限: 返される行数は、limit 設定の影響を受ける場合もあります。
- LIMIT BY — 値の各グループごとに行数を制限します。各カテゴリ内の上位 N 件の結果を取得する場合に便利です。