Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Aggregazione dei dati

Oltre a Join, già visto per legare le tabelle, si può utilizzare l'istruzione Group by che permette di raggruppare i dati
Oltre a Join, già visto per legare le tabelle, si può utilizzare l'istruzione Group by che permette di raggruppare i dati
Link copiato negli appunti

Nel capitolo dedicato ai legami tra le tabelle, abbiamo visto come è possibile sfruttare i comandi di JOIN per legare i dati di più tabelle. Non sempre però è sufficiente legare le tabelle tra di loro, per ottenere informazioni dettagliata, o meglio elaborate.

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 funzione substring per estrapolare parti di stringa o concat per unire più stringhe.

Ti consigliamo anche