

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Filtrare le matrici
<a name="filtering-arrays"></a>

Creare una matrice da una raccolta di righe nel caso in cui soddisfino i criteri di filtro.

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

Questa query restituisce:

```
+-------------+
| array_items |
+-------------+
| [4, 5]      |
+-------------+
```

Filtrare una matrice in base al fatto che uno dei suoi elementi contenga un valore specifico, ad esempio 2, come nel seguente esempio:

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

Questa query restituisce:

```
+--------------+
| array_items  |
+--------------+
| [1, 2, 3, 4] |
+--------------+
```

## Utilizzare la funzione `filter`.
<a name="filtering-arrays-filter-function"></a>

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

È possibile utilizzare la `filter` funzione su un'`ARRAY`espressione per creare un nuovo array che è il sottoinsieme degli elementi in *list\$1of\$1values* for *boolean\$1function* is true. La `filter` funzione può essere utile nei casi in cui non è possibile utilizzarla*UNNEST*.

Nell'esempio seguente vengono filtrati i valori maggiori di zero nella matrice `[1,0,5,-1]`.

```
SELECT filter(ARRAY [1,0,5,-1], x -> x>0)
```

**Risultati**  
`[1,5]`

Nell'esempio seguente vengono filtrati i valori non-null nella matrice `[-1, NULL, 10, NULL]`.

```
SELECT filter(ARRAY [-1, NULL, 10, NULL], q -> q IS NOT NULL)
```

**Risultati**  
`[-1,10]`