メインコンテンツまでスキップ
バージョン: 3.2

generate_series

説明

startend で指定された範囲内で、オプションの step を使用して一連の値を生成します。

generate_series() はテーブル関数です。テーブル関数は、各入力行に対して行セットを返すことができます。行セットには、ゼロ、1つ、または複数の行を含めることができます。各行には1つ以上の列を含めることができます。

StarRocks で generate_series() を使用するには、入力パラメータが定数の場合、TABLE キーワードで囲む必要があります。入力パラメータが列名などの式の場合、TABLE キーワードは不要です(例5参照)。

この関数は v3.1 からサポートされています。

構文

generate_series(start, end [,step])

パラメータ

  • start: シリーズの開始値(必須)。サポートされているデータ型は INT、BIGINT、および LARGEINT です。
  • end: シリーズの終了値(必須)。サポートされているデータ型は INT、BIGINT、および LARGEINT です。
  • step: 増分または減分の値(オプション)。サポートされているデータ型は INT、BIGINT、および LARGEINT です。指定しない場合、デフォルトのステップは 1 です。step は負または正のいずれかである必要がありますが、ゼロではいけません。

3つのパラメータは同じデータ型でなければなりません。例えば、generate_series(INT start, INT end [, INT step]) のようにします。

戻り値

入力パラメータ startend と同じ値のシリーズを返します。

  • step が正の場合、startend より大きいとゼロ行が返されます。逆に、step が負の場合、startend より小さいとゼロ行が返されます。
  • step が 0 の場合、エラーが返されます。
  • この関数は null を次のように処理します。入力パラメータがリテラル null の場合、エラーが報告されます。入力パラメータが式で、その結果が null の場合、0 行が返されます(例5参照)。

例1: デフォルトのステップ 1 で範囲 [2,5] 内の値のシーケンスを昇順で生成します。

MySQL > select * from TABLE(generate_series(2, 5));
+-----------------+
| generate_series |
+-----------------+
| 2 |
| 3 |
| 4 |
| 5 |
+-----------------+

例2: 指定されたステップ 2 で範囲 [2,5] 内の値のシーケンスを昇順で生成します。

MySQL > select * from TABLE(generate_series(2, 5, 2));
+-----------------+
| generate_series |
+-----------------+
| 2 |
| 4 |
+-----------------+

例3: 指定されたステップ -1 で範囲 [5,2] 内の値のシーケンスを降順で生成します。

MySQL > select * from TABLE(generate_series(5, 2, -1));
+-----------------+
| generate_series |
+-----------------+
| 5 |
| 4 |
| 3 |
| 2 |
+-----------------+

例4: step が負で startend より小さい場合、ゼロ行が返されます。

MySQL > select * from TABLE(generate_series(2, 5, -1));
Empty set (0.01 sec)

例5: テーブルの列を generate_series() の入力パラメータとして使用します。この使用例では、generate_series() に TABLE() を使用する必要はありません。

CREATE TABLE t_numbers(start INT, end INT)
DUPLICATE KEY (start)
DISTRIBUTED BY HASH(start) BUCKETS 1;

INSERT INTO t_numbers VALUES
(1, 3),
(5, 2),
(NULL, 10),
(4, 7),
(9,6);

SELECT * FROM t_numbers;
+-------+------+
| start | end |
+-------+------+
| NULL | 10 |
| 1 | 3 |
| 4 | 7 |
| 5 | 2 |
| 9 | 6 |
+-------+------+

-- ステップ 1 で行 (1,3) と (4,7) に対して複数の行を生成します。
SELECT * FROM t_numbers, generate_series(t_numbers.start, t_numbers.end);
+-------+------+-----------------+
| start | end | generate_series |
+-------+------+-----------------+
| 1 | 3 | 1 |
| 1 | 3 | 2 |
| 1 | 3 | 3 |
| 4 | 7 | 4 |
| 4 | 7 | 5 |
| 4 | 7 | 6 |
| 4 | 7 | 7 |
+-------+------+-----------------+

-- ステップ -1 で行 (5,2) と (9,6) に対して複数の行を生成します。
SELECT * FROM t_numbers, generate_series(t_numbers.start, t_numbers.end, -1);
+-------+------+-----------------+
| start | end | generate_series |
+-------+------+-----------------+
| 5 | 2 | 5 |
| 5 | 2 | 4 |
| 5 | 2 | 3 |
| 5 | 2 | 2 |
| 9 | 6 | 9 |
| 9 | 6 | 8 |
| 9 | 6 | 7 |
| 9 | 6 | 6 |
+-------+------+-----------------+

入力行 (NULL, 10) には NULL 値が含まれており、この行に対してゼロ行が返されます。

キーワード

table function, generate series

Rocky the happy otterStarRocks Assistant

AI generated answers are based on docs and other sources. Please test answers in non-production environments.