

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 篩選陣列
<a name="filtering-arrays"></a>

如果資料列的集合符合篩選條件，則從資料列的集合建立陣列。

```
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` 函式
<a name="filtering-arrays-filter-function"></a>

```
 filter(ARRAY [list_of_values], boolean_function)
```

您可以在 `ARRAY` 表達式上使用 `filter` 函數建立一個新的陣列，該陣列是 *list\$1of\$1values* 中項目的子集，其 *boolean\$1function* 為 true。`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]`