筛选数组
如果行集合与筛选条件匹配,则从这些行创建一个数组。
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
)
您可以使用 filter
表达式上的 ARRAY
函数来创建新数组,该数组是 boolean_function
为真的 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]
中非空的值。
SELECT filter(ARRAY [-1, NULL, 10, NULL], q -> q IS NOT NULL)
结果
[-1,10]