ProgrammazioneAnalista di reportistica (SQL Analyst)

Qual è la differenza tra la funzione aggregata SUM() e la funzione di finestra SUM()? In quali casi è preferibile utilizzare le funzioni di finestra? Fornisci un esempio.

Supera i colloqui con l'assistente IA Hintsage

Risposta

La funzione aggregata SUM() somma i valori su tutto il gruppo di righe nel set di risultati, restituendo un unico valore per ogni gruppo (o per l'intera query). La funzione di finestra SUM() consente di calcolare la somma su una "finestra" di valori definita all'interno del SELECT (tramite OVER()), mantenendo ogni riga nel risultato e accedendo al risultato aggregato attraverso la propria "finestra". Questo è particolarmente utile per ottenere totali intermedi per gruppi.

Esempio di funzione aggregata:

SELECT department_id, SUM(salary) FROM employees GROUP BY department_id;

Esempio di funzione di finestra:

SELECT department_id, salary, SUM(salary) OVER (PARTITION BY department_id ORDER BY hire_date) FROM employees;

Domanda insidiosa

"È possibile ottenere una somma cumulativa («in corsa») su una colonna solo utilizzando la funzione aggregata GROUP BY?"

Risposta: No! GROUP BY fornisce solo aggregati finali, la somma in corsa richiede o una funzione di finestra, o subquery complesse, che sono più complicate e lente.

Esempio:

SELECT salary, SUM(salary) OVER (ORDER BY hire_date) AS running_total FROM employees;

Storia

Nel report sulle transazioni, la somma in corsa è stata implementata tramite molte subquery correlate. Con la crescita della tabella, le performance sono diminuite di decine di volte. Passando alla funzione di finestra, tutto è tornato a secondi.


Storia

Un tentativo di fare analisi complessa con totali per gruppi tramite GROUP BY è sfociato in più fasi di estrazione e elaborazione in software esterni. Le funzioni di finestra hanno permesso di generare il report necessario in una sola query SQL.


Storia

Un analista ha scritto una query con funzioni di finestra, utilizzando un PARTITION BY errato — i risultati per i diversi gruppi si sono mescolati. Risultato — reportistica distorta. Dopo aver corretto la suddivisione per gruppi, i dati sono diventati corretti.