Una sequenza di numeri
Fa parte della sezione Oltre le basi del percorso SQL di Coddy. Lezione 20 di 27.
Hai incontrato la parola chiave WITH in Fondamenti per dare un nome a una sottoquery, nota anche come CTE (espressione di tabella comune). Una CTE ricorsiva fa un passo in più: permette alla sottoquery di fare riferimento a sé stessa, costruendo un risultato riga per riga.
La versione più semplice genera una sequenza di numeri senza una tabella sottostante. La struttura è sempre la stessa:
WITH RECURSIVE counter(n) AS (
SELECT 1 -- caso base: la riga iniziale
UNION ALL
SELECT n + 1 FROM counter WHERE n < 5 -- ricorsivo: costruisce la riga successiva a partire dall'ultima
)
SELECT n FROM counterLeggilo così: inizia con n = 1, poi continua ad aggiungere righe in cui ogni n è il precedente n + 1, fermandoti quando WHERE non corrisponde più. Il risultato è 1, 2, 3, 4, 5.
Le due parti del corpo sono unite da UNION ALL. La prima è l'ancora: le righe iniziali. La seconda è il passaggio ricorsivo: interroga la CTE stessa.
Sfida
FacileScrivi una CTE ricorsiva chiamata powers con due colonne:
i: l’indice di iterazione, a partire da1p:2elevato alla potenzai-esima (2,4,8, …)
Fermati quando p supererebbe 1000. Restituisci entrambe le colonne, ordinate in modo crescente per i.
Provalo tu
WITH RECURSIVE powers(i, p) AS (
-- caso base: i=1, p=2
-- passo ricorsivo: i+1, p*2, finché p raggiunge 1000
)
SELECT i, p FROM powers ORDER BY i
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Oltre le basi
2Funzioni sulle stringhe
LENGTH, UPPER, LOWERSUBSTRINSTRREPLACE e TRIMConcatenare con ||Ripasso - Fatture3Aggregazione condizionale
COUNT con CASESUM con CASETrasformare le righe in colonneRiepilogo - Fonti di trafficoEsercitati da solo: Playground SQL