Skill Factory
Lista post > Ricominciamo ... dal linguaggio SQL Lezione 12
Ricominciamo ... dal linguaggio SQL Lezione 12
Gino Visciano |
Skill Factory - 26/04/2016 23:39:50 | in Tutorials
Benvenuti alla dodicesima lezione, in questa nuova lezione vedrete la clausola Group By del comando Select.
Il comando Select utilizza la clausola Group By combinata con le funzioni statistiche per ottenere viste con SUBTOTALI, in base alle chiavi di raggruppamento indicate.
Per capire come funziona la clausola Group By partiamo dalla query seguente, che ordina il contenuto della tabella utilizzando come chiave di ordinamento il nominativo del cliente.
select fat.num_fat, fat.data, cli.nominativo, fat.imponibile, ts.tipo_scadenza from fatture as fat join clienti as cli on(fat.id_cliente=cli.id) join tipo_scadenza as ts on(fat.id_tipo_scadenza=ts.id) order by cli.nominativo;
num_fat | data | nominativo | imponibile | tipo_scadenza |
0015/16 | 2016-03-31 | Aldebran | 800.00 | 30 DFFM |
0009/16 | 2016-02-29 | Aldebran | 1800.00 | 30 DFFM |
0003/16 | 2016-01-15 | Aldebran | 1500.00 | 30 DFFM |
0016/16 | 2016-03-31 | Cassandra | 1600.00 | 30 DFFM |
0010/16 | 2016-02-29 | Cassandra | 600.00 | 30 DFFM |
0004/16 | 2016-01-15 | Cassandra | 500.00 | 30 DFFM |
0008/16 | 2016-02-29 | Fiorini & Figli | 2100.00 | 30 gg DF |
0002/16 | 2016-01-15 | Fiorini & Figli | 2000.00 | 30 gg DF |
0014/16 | 2016-03-31 | Fiorini & Figli | 900.00 | 30 gg DF |
0013/16 | 2016-03-31 | Morgan & C. | 1900.00 | 30 gg DF |
0007/16 | 2016-02-29 | Morgan & C. | 1500.00 | 30 gg DF |
0001/16 | 2016-01-15 | Morgan & C. | 1000.00 | 30 gg DF |
0017/16 | 2016-03-31 | Pedretti | 2000.00 | 60 gg DF |
0011/16 | 2016-02-29 | Pedretti | 1900.00 | 60 gg DF |
0005/16 | 2016-01-15 | Pedretti | 1800.00 | 60 gg DF |
0018/16 | 2016-03-31 | Staiano | 1000.00 | 60 DFFM |
0012/16 | 2016-02-29 | Staiano | 900.00 | 60 DFFM |
0006/16 | 2016-01-29 | Staiano | 800.00 | 60 DFFM |
La tabella che si ottine eseguendo la query, appare ordinata in base alla colonna nominativo cliente, il punto in cui cambia il nominativo del cliente si chiama rottura di codice ed indica la fine del gruppo precedente e l'inizio del gruppo seguente. Ogni gruppo caratterizzato dalla rottura di codice è una SOTTOTABELLA a cui si possono applicare le funzioni statistiche se si utilizza la clausola Group By.
Vediamo alcuni esempi:
1) Qual è il fatturato di ogni cliente?
select cli.nominativo, sum(fat.imponibile) as "fatturato" from fatture as fat join clienti as cli on(fat.id_cliente=cli.id) join tipo_scadenza as ts on(fat.id_tipo_scadenza=ts.id) group by cli.nominativo;
nominativo | fatturato |
Aldebran | 4100.00 |
Cassandra | 2700.00 |
Fiorini & Figli | 5000.00 |
Morgan & C. | 4400.00 |
Pedretti | 5700.00 |
Staiano | 2700.00 |
Attenzione, quando usate la clausola Group By, non dimenticate che le colonne della select devono corrispondere alle chiavi di raggruppamento e alle funzioni statistiche da utilizzare.
2) Qual è il fatturato di ogni cliente e quante fatture ha emesso?
select cli.nominativo, count(*) as "fatture emesse", sum(fat.imponibile) as "fatturato" from fatture as fat join clienti as cli on(fat.id_cliente=cli.id) join tipo_scadenza as ts on(fat.id_tipo_scadenza=ts.id) group by cli.nominativo;
nominativo | fatture emesse | fatturato |
Aldebran | 3 | 4100.00 |
Cassandra | 3 | 2700.00 |
Fiorini & Figli | 3 | 5000.00 |
Morgan & C. | 3 | 4400.00 |
Pedretti | 3 | 5700.00 |
Staiano | 3 | 2700.00 |
3) Quali clienti in totale hanno fatto un fatturato inferiore a €5000.00?
select cli.nominativo, sum(fat.imponibile) as "fatturato" from fatture as fat join clienti as cli on(fat.id_cliente=cli.id) join tipo_scadenza as ts on(fat.id_tipo_scadenza=ts.id) group by cli.nominativo having sum(fat.imponibile)<5000.00;
oppure
select cli.nominativo, sum(fat.imponibile) as "fatturato" from fatture as fat join clienti as cli on(fat.id_cliente=cli.id) join tipo_scadenza as ts on(fat.id_tipo_scadenza=ts.id) group by cli.nominativo having fatturato<5000.00;
nominativo | fatturato |
Aldebran | 4100.00 |
Cassandra | 2700.00 |
Morgan & C. | 4400.00 |
Staiano | 2700.00 |
La clausola Having permette di inserire una condizione di selezione sul risultato del Group By.
<< Lezione precedente Lezione successiva >>
T U T O R I A L S S U G G E R I T I