Skillbook Logo
foto profilo

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


Share Button
TOP