MySQL 8.0 ha introdotto il supporto per due funzionalità potentissime dello standard SQL, che erano attese da tempo: le Common Table Expressions (CTE) e le Window Functions. Queste trasformano il modo in cui si scrivono le query analitiche complesse.
Common Table Expressions (CTE)
Una CTE, introdotta dalla clausola `WITH`, è un "set di risultati temporaneo e nominato" a cui puoi fare riferimento all'interno di una `SELECT`, `INSERT`, `UPDATE` o `DELETE`. Pensa a una CTE come a una "vista" o a una "tabella temporanea" che esiste solo per la durata di una singola query.
Rendono le query complesse, che prima richiedevano subquery annidate e illeggibili, molto più strutturate e facili da capire.
Esempio: Trovare i Reparti con uno Stipendio Medio Superiore alla Media Aziendale
WITH
media_stipendi_aziendale AS (
SELECT AVG(stipendio) AS media_globale FROM dipendenti
),
media_stipendi_reparto AS (
SELECT reparto, AVG(stipendio) AS media_reparto FROM dipendenti GROUP BY reparto
)
SELECT reparto, media_reparto
FROM media_stipendi_reparto, media_stipendi_aziendale
WHERE media_reparto > media_globale;Window Functions
Le Window Functions eseguono un calcolo su un insieme di righe (una "finestra") che sono in qualche modo correlate alla riga corrente. A differenza delle funzioni di aggregazione (`GROUP BY`), non comprimono le righe in un unico risultato; ogni riga mantiene la sua identità e ottiene un valore aggiuntivo calcolato sulla sua "finestra".
Sono potentissime per calcoli come ranking, totali progressivi e medie mobili.
Esempio: Assegnare un Ranking agli Stipendi per Reparto
SELECT
nome,
reparto,
stipendio,
RANK() OVER (PARTITION BY reparto ORDER BY stipendio DESC) as ranking_in_reparto
FROM dipendenti;Questa query restituirà una riga per ogni dipendente, con una colonna aggiuntiva che indica la sua posizione in classifica (ranking) basata sullo stipendio, ma calcolata separatamente per ogni reparto (`PARTITION BY reparto`).
Hai bisogno di una soluzione su misura?
Dalla Web App al gestionale custom, trasformiamo le tue idee in software performante. Contattaci per una consulenza gratuita.
Richiedi una consulenza