CodeGym /Corsi /SQL SELF /Estrazione dei dati da un array: unnest(), ...

Estrazione dei dati da un array: unnest(), array_length(), array_position()

SQL SELF
Livello 35 , Lezione 2
Disponibile

Lavorare con gli array non si limita solo a crearli e salvarli — spesso serve estrarre singoli elementi o analizzare il loro contenuto. PostgreSQL offre diverse funzioni built-in per queste operazioni. Vediamole una per una.

Funzione unnest(): spacchettare un array

La funzione unnest() letteralmente spacchetta l’array, trasformando ogni elemento in una riga separata. È super utile se vuoi lavorare con i dati dell’array come se fossero una tabella.

Esempio 1: Spacchettare un array semplice

Supponiamo di avere un array con i nomi delle facoltà:

SELECT ARRAY['Informatica', 'Matematica', 'Fisica'] AS facoltà;

Ora vogliamo estrarre ogni elemento come riga separata. Usiamo unnest():

SELECT unnest(ARRAY['Informatica', 'Matematica', 'Fisica']) AS facoltà;

Risultato:

facoltà
Informatica
Matematica
Fisica

Esempio 2: Spacchettare un array in una tabella

Immagina di avere una tabella courses:

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,
    course_name TEXT,
    tags TEXT[]
);

INSERT INTO courses (course_name, tags)
VALUES
    ('Algoritmi', ARRAY['Programmazione', 'Informatica']),
    ('Algebra lineare', ARRAY['Matematica', 'Algebra']),
    ('Fisica base', ARRAY['Fisica', 'Generale']);

Ora estraiamo tutti i tag dall’array:

SELECT course_name, unnest(tags) AS tag
FROM courses;

Risultato:

course_name tag
Algoritmi Programmazione
Algoritmi Informatica
Algebra lineare Matematica
Algebra lineare Algebra
Fisica base Fisica
Fisica base Generale

Come vedi, ogni elemento dell’array diventa una riga separata nella tabella.

Funzione array_length(): determinare la dimensione di un array

Un’altra funzione fondamentale per lavorare con gli array è array_length(). Ti restituisce la lunghezza dell’array (cioè il numero di elementi) per la dimensione che indichi.

Esempio 1: Numero di elementi in un array monodimensionale

Prendiamo un array:

SELECT ARRAY['Mela', 'Banana', 'Arancia'] AS frutti;

Se vuoi sapere quanti frutti ci sono nell’array:

SELECT array_length(ARRAY['Mela', 'Banana', 'Arancia'], 1) AS lunghezza;

Risultato:

lunghezza
3

Qui 1 indica la dimensione dell’array. Gli array in PostgreSQL possono avere più dimensioni (tipo array bidimensionali), ma di questo ne parliamo un’altra volta.

Esempio 2: Numero di elementi in un array di una tabella

Vediamo quanti tag ha ogni corso:

SELECT course_name, array_length(tags, 1) AS numero_tag
FROM courses;

Risultato:

course_name numero_tag
Algoritmi 2
Algebra lineare 2
Fisica base 2

La funzione ti dice semplicemente: “Ehi, qui ci sono due elementi!”, e già questo semplifica un sacco l’analisi dei dati.

Funzione array_position(): cercare un valore in un array

Ora, immagina di dover cercare un elemento specifico in un array. La funzione array_position() ti salva: ti restituisce la posizione della prima occorrenza dell’elemento.

Esempio 1: Cercare un elemento

Supponiamo di avere un array:

SELECT ARRAY['Rosso', 'Blu', 'Verde', 'Giallo'] AS colori;

Proviamo a trovare la posizione dell’elemento "Blu":

SELECT array_position(ARRAY['Rosso', 'Blu', 'Verde', 'Giallo'], 'Blu') AS posizione;

Risultato:

posizione
2

Se l’elemento non c’è, la funzione restituisce NULL. Vediamo:

SELECT array_position(ARRAY['Rosso', 'Blu', 'Verde', 'Giallo'], 'Nero') AS posizione;

Risultato:

posizione
NULL

Esempio 2: Cercare in un array di una tabella

Vuoi sapere quale corso ha il tag "Informatica". Prima troviamo le righe giuste:

SELECT course_name, array_position(tags, 'Informatica') AS posizione
FROM courses;

Risultato:

course_name posizione
Algoritmi 2
Algebra lineare NULL
Fisica base NULL

Ora aggiungi un filtro per tenere solo le righe dove il tag c’è:

SELECT course_name
FROM courses
WHERE array_position(tags, 'Informatica') IS NOT NULL;

Risultato:

course_name
Algoritmi

La funzione array_position() ti permette di trovare al volo i dati dentro un array, ed è una delle più utili per lavorare con gli array in PostgreSQL.

Applicazione pratica delle funzioni

  • unnest() — usala per trasformare gli array in righe. È fondamentale per analisi dati, report e gestione dei tag.
  • array_length() — perfetta per controllare la lunghezza degli array. Ad esempio, puoi usarla per validare i dati: controlla che l’array non sia vuoto.
  • array_position() — uno strumento top per cercare elementi, che siano categorie di prodotti, partecipazione di uno studente a un progetto o parole chiave nella descrizione.

Errori tipici nell’uso delle funzioni

  1. unnest() può raddoppiare il numero di righe se la usi su array in più colonne contemporaneamente. Si risolve facilmente aggiungendo JOIN LATERAL o CROSS JOIN, ma occhio!
  2. array_length() restituisce NULL per un array vuoto. Se il tuo array può essere vuoto, controllalo a parte.
  3. array_position() può restituire NULL se l’elemento non c’è. Quindi meglio sempre gestire questo caso nei filtri (IS NOT NULL).

Esempi dalla pratica reale

Gli array in PostgreSQL non sono solo roba teorica, ma strumenti che funzionano alla grande nei progetti veri. Tipo, se hai un blog e ogni articolo ha una lista di tag — l’array ti permette di filtrare facilmente gli articoli per argomento o anche fare una top delle categorie più popolari.

Oppure, se analizzi il comportamento degli utenti che scelgono più corsi o prodotti. Tutte queste preferenze le puoi salvare in un array — e lavorarci in modo super comodo.

E poi gli array aiutano anche a validare i dati: con array_length() puoi, ad esempio, limitare il numero di elementi — tipo per non far scegliere all’utente più di cinque opzioni.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION