Aggregazione dei dati

Pensiamo alla solita tabella ORDINI e a dei calcoli di tipo statistico che il cliente potrebbe chiederci. Ad esempio, se volessimo ottenere il numero di ordini per cliente, dovremmo si eseguire una JOIN tra le informazioni anagrafiche e gli ordini, ma non solo, dovremmo effettuare anche una “conta” dei record per ogni cliente, quindi avremmo bisogno dell’ausilio di un programma. T-SQL offre la clausola GROUP BY, che ci consente di raggruppare i dati secondo determinati criteri logici e varie funzioni matematica.

Istruzione GROUP-BY

Serve principalmente per rendere semplice l’estrapolazione di dati di tipo statistico, o comunque con il valore calcolato da raggruppamenti e filtri.

Listato 1. Voglio conoscere i clienti che hanno effettuato ordini

SELECT
ANA_NOME, ANA_COGNOME
FROM
ANAGRAFICA
INNER JOIN ORDINI
ON ANAGRAFICA.ANA_ID = ORDINI.ORD_ID_ANA
GROUP BY
ANA_NOME, ANA_COGNOME

Istruzione COUNT

Nell’istruzione precedente possiamo aggiungere la quantità di ordini di ogni cliente. Per calcolare la quantità usiamo in questo caso la funzione COUNT che conta le righe estratte. Nel caso di un group by conta le righe che comparirebbero.

Listato 2. I clienti che hanno effettuato ordini con il numero di ordini

SELECT
ANA_NOME, ANA_COGNOME, COUNT(ORD_CODICE) NUMERO
FROM
ANAGRAFICA
INNER JOIN ORDINI
ON ANAGRAFICA.ANA_ID = ORDINI.ORD_ID_ANA
GROUP BY
ANA_NOME, ANA_COGNOME

Questa prima parte è servita per comprendere la logica che si deve usare con SQL Server per poter estrarre dati complessi, senza dover intervenire con codice di programmazione esterno.

Funzioni di CALCOLO

In questa sezione vediamo alcune funzioni di calcolo che sicuramente potranno tornare utili. Restiamo sempre in ambito statistico e pensiamo ad un resoconto degli ordini annuali. Dovremmo evidenziare per ogni cliente, non solo il numero di ordini, ma, il totale speso, l’ordine nel quale ha speso di più e la media di quanto ha speso per ordine.

Listato 3. Query per resoconti annuali

SELECT
SUBSTRING(ANA_NOME, 1, 10) NOME,
SUBSTRING(ANA_COGNOME, 1, 10) COGNOME,
COUNT(ORD_ID_ANA) ORDINI,
SUM(ORD_PREZZO) TOTALE,
AVG(ORD_PREZZO) MEDIA,
MAX(ORD_PREZZO) CARO
FROM
ANAGRAFICA
INNER JOIN
ORDINI ON ANAGRAFICA.ANA_ID = ORDINI.ORD_ID_ANA
GROUP BY
ANA_ID, ANA_NOME, ANA_COGNOME

Con la funzione SUM calcoliamo la somma dei valori del campo prezzo. Il totale speso da ogni cliente.

La funzione AVG che sta per average (media) restituisce la media spesa per ordine, ovvero il totale speso diviso il numero di ordini effettuati.

Ultima, la funzione MAX (esiste anche una funzione MIN), fornisce il valore massimo per il set di record estratti.

Infine T-SQL offre una moltitudine di funzioni per l’elaborazione e la trasformazione dei dati, come un normale linguaggio di programmazione. Avremo, per esempio, la funzionesubstring per estrapolare parti di stringa o concat per unire più stringhe.

Both comments and pings are currently closed.

Comments are closed.