Passer au contenu principal
eLearner.app
Module 13 · Leçon 1 sur 449/57 dans le cours~15 min
Leçons du module (1/4)

Introduzione e Clausola OVER

Introduzione e Clausola OVER

Nelle lezioni precedenti abbiamo visto come usare GROUP BY per aggregare i dati. Tuttavia, il GROUP BY ha un limite enorme: collassa le righe. Se raggruppi per città, ottieni una sola riga per città e perdi i dettagli dei singoli clienti.

Qui entrano in gioco le Window Functions (Funzioni Finestra). Esse permettono di eseguire calcoli aggregati (come somme o medie) mantenendo le righe originali.

La clausola OVER()

La parola chiave magica è OVER(). Indica al database che la funzione aggregata (es. SUM, AVG, COUNT) deve essere trattata come una funzione finestra, calcolata sull'intero insieme dei risultati (la "finestra" globale) ma applicata e restituita su ogni singola riga.

SQL
SELECT
  order_id,
  total_amount,
  AVG(total_amount) OVER() AS global_average
FROM orders;

In questo esempio, manteniamo tutti i singoli ordini, ma in ogni riga avremo anche una colonna global_average con la media di tutti gli ordini. Molto utile per calcolare ad esempio quanto un ordine si discosta dalla media!

Exercice#sql.m13.l1.e1
Tentatives : 0Chargement…

Seleziona la colonna 'price' dalla tabella 'products'. Aggiungi una colonna chiamata 'global_max_price' che contiene il prezzo massimo calcolato tramite una funzione finestra sull'intera tabella.

Chargement de l'éditeur…
Afficher l'indice

Usa MAX(price) combinato a OVER().

Solution disponible après 3 tentatives

Exercice#sql.m13.l1.e2
Tentatives : 0Chargement…

Estrai 'id', 'price' e affiancagli il prezzo medio totale ('global_avg') dalla tabella 'products'.

Chargement de l'éditeur…
Afficher l'indice

Basta aggiungere AVG(price) OVER().

Solution disponible après 3 tentatives