

# 배열 필터링
<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` 함수를 사용하여 *boolean\$1function*이 true인 *list\$1of\$1values*에 항목의 하위 집합인 새 배열을 만듭니다. `filter` 함수는 *UNNEST* 함수를 사용할 수 없는 경우에 유용할 수 있습니다.

다음 예제에서는 `[1,0,5,-1]` 배열에서 0보다 큰 값으로 필터링합니다.

```
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]`