フィルタ条件に一致する行のコレクションから配列を作成します。
WITH
dataset AS (
SELECT ARRAY[1,2,3,4,5] AS items
)
SELECT array_agg(i) AS array_items
FROM dataset
CROSS JOIN UNNEST(items) AS t(i)
WHERE i > 3
このクエリは以下を返します。
+-------------+
| array_items |
+-------------+
| [4, 5] |
+-------------+
配列の各要素に特定の値 (2 など) が含まれているかどうかに基づいて配列をフィルタ処理します。次に例を示します。
WITH
dataset AS (
SELECT ARRAY
[
ARRAY[1,2,3,4],
ARRAY[5,6,7,8],
ARRAY[9,0]
] AS items
)
SELECT i AS array_items FROM dataset
CROSS JOIN UNNEST(items) AS t(i)
WHERE contains(i, 2)
このクエリは以下を返します。
+--------------+
| array_items |
+--------------+
| [1, 2, 3, 4] |
+--------------+
filter
関数を使用する
filter(ARRAY [
list_of_values
],boolean_function
)
ARRAY
式で filter
関数を使用して、boolean_function
が true となっている list_of_values
内の項目のサブセットである新しい配列を作成できます。filter
関数は、UNNEST
関数を使用できない場合に役立ちます。
次の例では、配列 [1,0,5,-1]
内のゼロより大きい値をフィルタリングします。
SELECT filter(ARRAY [1,0,5,-1], x -> x>0)
結果
[1,5]
次の例では、配列 [-1, NULL,
10, NULL]
内の null 以外の値をフィルタリングします。
SELECT filter(ARRAY [-1, NULL, 10, NULL], q -> q IS NOT NULL)
結果
[-1,10]