• Non ci sono risultati.

Fondamenti di Informatica

N/A
N/A
Protected

Academic year: 2021

Condividi "Fondamenti di Informatica"

Copied!
25
0
0

Testo completo

(1)

Fondamenti di Informatica

Funzioni di Aggregazione e Raggruppamenti in SQL

Pro f. M a rco Lo mb a rd i

(2)

Le Funzioni di Aggregazione – 1/10

Le funzioni di aggregazione (dette anche

funzioni aggregate o «di colonna»)

Permettono di collezionare (aggregare) valori in

input

Operano su singola colonna (campo)

Restituiscono un singolo valore

Utilizzate solo nelle interrogazioni (SELECT)

(3)

Lo standard SQL mette a disposizione le seguenti funzioni

aggregate

Funzione SQL

Descrizione

MIN

Restituisce il minimo dell’insieme di input

MAX

Restituisce il massimo dell’insieme di input

SUM

Restituisce la somma dell’insieme di input

AVG

Restituisce la media dell’insieme di input

STDEV

Restituisce la deviazione standard dell’insieme di input

VARIANCE

Restituisce la varianza dell’insieme di input

COUNT

Restituisce il numero di elementi dell’insieme di input

Le Funzioni di Aggregazione – 2/10

(4)

Esempio 1

SELECT MIN(prezzo) FROM giocattolo;

10

prodID

descrizione

prezzo

2504 Peluche 10 2809 Macchinina 25 3487 Pista 50 2980 Bambola 30

Tabella: giocattolo

Le Funzioni di Aggregazione – 3/10

L’interrogazione restituisce il minimo valore del

campo prezzo

(5)

Esempio 2

SELECT MAX(prezzo) FROM giocattolo;

50

prodID

descrizione

prezzo

2504 Peluche 10 2809 Macchinina 25 3487 Pista 50 2980 Bambola 30

Tabella: giocattolo

Le Funzioni di Aggregazione – 4/10

L’interrogazione restituisce il massimo valore

del campo prezzo

(6)

Esempio 3

clienteID

nome

cognome

cap

citta

50 Mario Rossi 84084 Fisciano 51 Giulio Bianchi 84084 Fisciano 52 Silvio Blu 84121 Salerno 58 Maria Azzurro 84125 Salerno 60 Luigi Magenta 84081 Baronissi 61 Giorgio Viola 84025 Eboli

SELECT COUNT(citta) FROM cliente WHERE citta LIKE ‘Fis%’;

2

Tabella: cliente

Le Funzioni di Aggregazione – 5/10

L’interrogazione restituisce il numero di record in cui il valore del

campo citta inizia per la sottostringa ‘Fis’

(7)

Esempio 4

SELECT COUNT(modello)

FROM auto

WHERE modello LIKE ‘%500%’;

autoID

marca

modello

immatricolazione

FIAT500_1 FIAT 500 2011 FIAT500L_1 FIAT 500L 2014 ALFAGIULIA_1 Alfa Romeo Giulia 2016 JEEPR_1 Jeep Renegade 2015 FIAT500_2 FIAT 500 NULL

Tabella: auto

3

Le Funzioni di Aggregazione – 6/10

L’interrogazione restituisce il numero di record in cui il valore del

campo modello contiene la sottostringa ‘500’

(8)

Esempio 5

SELECT AVG(salario_annuo) FROM impiegato;

matricola

nome

cognome

salario_annuo

0101 Giorgio Blu 22000 0210 Mario Rossi 28900 0451 Luigi Bianchi 24000 54023 Maria Giallo 23000 4124 Guido Viola 19000

Tabella: impiegato

23380

Le Funzioni di Aggregazione – 7/10

L’interrogazione restituisce il valore medio del campo

salario_annuo

(9)

Esempio 6

SELECT SUM(salario_annuo)

FROM impiegato

WHERE salario_annuo >= 23000;

matricola

nome

cognome

salario_annuo

0101 Giorgio Blu 22000 0210 Mario Rossi 28900 0451 Luigi Bianchi 24000 54023 Maria Giallo 23000 4124 Guido Viola 19000

Tabella: impiegato

75900

Le Funzioni di Aggregazione – 8/10

L’interrogazione restituisce la somma dei valori maggiori o uguali a 23000, relativi

al campo salario_annuo

(10)

Esempio 7

SELECT MIN(salario_annuo), MAX(salario_annuo) FROM impiegato;

matricola

nome

cognome

salario_annuo

0101 Giorgio Blu 22000 0210 Mario Rossi 28900 0451 Luigi Bianchi 24000 54023 Maria Giallo 23000 4124 Guido Viola 19000

Tabella: impiegato

19000

28900

Le Funzioni di Aggregazione – 9/10

L’interrogazione restituisce il valore minimo ed

il valore massimo del campo prezzo

(11)

Utilizzando l’opzione DISTINCT, vengono considerati solo i

valori distinti

Esempio 8

SELECT COUNT(DISTINCT marca) FROM auto;

autoID

marca

modello

immatricolazione

FIAT500_1 FIAT 500 2011 FIAT500L_1 FIAT 500L 2014 ALFAGIULIA_1 Alfa Romeo Giulia 2016 JEEPR_1 Jeep Renegade 2015 FIAT500_2 FIAT 500 NULL

Tabella: auto

3

Le Funzioni di Aggregazione – 10/10

L’interrogazione restituisce il numero di valori distinti

del campo marca

(12)

Può essere migliorata la leggibilità del risultato di una query

(mediante l’istruzione SELECT)

Si può assegnare temporaneamente un alias (ovvero uno

pseudonimo) ad uno o più campi e/o ad uno o più tabelle

L’alias di un campo può essere assegnato utilizzando la

parola chiave AS

Esempio

La parola chiave

AS

può essere anche omessa (facendo seguire il

nome dell’alias al nome del campo)

SELECT nome_campo AS AliasDelCampo FROM tabella;

SELECT nome_campo AliasDelCampo FROM tabella;

Gli Alias in SQL – 1/3

(13)

Esempio 1

Istruzione equivalente:

SELECT salario_annuo AS SalarioAnnuoPercepito FROM impiegato;

matricola

nome

cognome

salario_annuo

0101 Giorgio Blu 22000 0210 Mario Rossi 28900 0451 Luigi Bianchi 24000 54023 Maria Giallo 23000 4124 Guido Viola 19000

SalarioAnnuoPercepito

22000 28900 24000 23000 19000

SELECT salario_annuo SalarioAnnuoPercepito FROM impiegato;

Tabella: impiegato

(14)

SELECT MIN(salario_annuo) AS SalarioAnnuoMinimo FROM cliente;

Tabella: impiegato

SalarioAnnuoMinimo

19000

SELECT SUM(salario_annuo) AS sommaDeiSalari FROM cliente;

sommaDeiSalari

116900

matricola

nome

cognome

salario_annuo

0101 Giorgio Blu 22000 0210 Mario Rossi 28900 0451 Luigi Bianchi 24000 54023 Maria Giallo 23000 4124 Guido Viola 19000

AS può essere utilizzato

anche in combinazione con le

funzioni di aggregazione

(15)

I valori ottenuti come risultato delle funzioni di

aggregazione si riferiscono a tutti i record, che soddisfano le

caratteristiche e le condizioni specificate dalla clausola

WHERE

Spesso è opportuno che tali valori vengano ottenuti

considerando gruppi omogenei di record

Esempi

Numero degli studenti iscritti al Corso di Laurea in Ingegneria Meccanica

Numero degli studenti iscritti al Corso di Laurea in Ingegneria Gestionale

Salario medio dei dipendenti che lavorano presso la stessa sede

Mediante la clausola GROUP BY è possibile definire tali gruppi

(16)

La clausola GROUP BY permette quindi di definire dei gruppi

omogenei, specificando una o più colonne (dette colonne di

riferimento)

Sulla base delle colonne di riferimento specificate, i record verranno

raggruppati per valori uguali

(17)

La clausola GROUP BY permette quindi di definire dei gruppi

omogenei, specificando una o più colonne (dette colonne di

riferimento)

Sulla base delle colonne di riferimento specificate, i record verranno

raggruppati per valori uguali

Esempio 1

autoID

marca

modello

immatricolazione

FIAT500_1 FIAT 500 2011 FIAT500L_1 FIAT 500L 2014 ALFAGIULIA_1 Alfa Romeo Giulia 2016 JEEPR_1 Jeep Renegade 2015

Tabella: auto

SELECT marca, COUNT(*) AS NumeroAuto FROM auto GROUP BY marca;

I Raggruppamenti – 3/5

(18)

La clausola GROUP BY permette quindi di definire dei gruppi

omogenei, specificando una o più colonne (dette colonne di

riferimento)

Sulla base delle colonne di riferimento specificate, i record verranno

raggruppati per valori uguali

Esempio 1

autoID

marca

modello

immatricolazione

FIAT500_1 FIAT 500 2011 FIAT500L_1 FIAT 500L 2014 ALFAGIULIA_1 Alfa Romeo Giulia 2016 JEEPR_1 Jeep Renegade 2015

Tabella: auto

SELECT marca, COUNT(*) AS NumeroAuto FROM auto GROUP BY marca;

Colonna di riferimento

I Raggruppamenti – 3/5

(19)

La clausola GROUP BY permette quindi di definire dei gruppi

omogenei, specificando una o più colonne (dette colonne di

riferimento)

Sulla base delle colonne di riferimento specificate, i record verranno

raggruppati per valori uguali

Esempio 1

autoID

marca

modello

immatricolazione

FIAT500_1 FIAT 500 2011 FIAT500L_1 FIAT 500L 2014 ALFAGIULIA_1 Alfa Romeo Giulia 2016 JEEPR_1 Jeep Renegade 2015

Tabella: auto

SELECT marca, COUNT(*) AS NumeroAuto FROM auto GROUP BY marca;

Colonna di riferimento

I record saranno

raggruppati per valori

uguali presenti nella

colonna marca

(20)

La clausola GROUP BY permette quindi di definire dei gruppi

omogenei, specificando una o più colonne (dette colonne di

riferimento)

Sulla base delle colonne di riferimento specificate, i record verranno

raggruppati per valori uguali

Esempio 1

autoID

marca

modello

immatricolazione

FIAT500_1 FIAT 500 2011 FIAT500L_1 FIAT 500L 2014 ALFAGIULIA_1 Alfa Romeo Giulia 2016 JEEPR_1 Jeep Renegade 2015

Tabella: auto

SELECT marca, COUNT(*) AS NumeroAuto FROM auto GROUP BY marca;

Colonna di riferimento

I record saranno raggruppati

per valori uguali presenti nella

colonna marca

A ciascun gruppo si applica la

funzione aggregata count

(21)

La clausola GROUP BY permette quindi di definire dei gruppi

omogenei, specificando una o più colonne (dette colonne di

riferimento)

Sulla base delle colonne di riferimento specificate, i record verranno

raggruppati per valori uguali

Esempio 1

autoID

marca

modello

immatricolazione

FIAT500_1 FIAT 500 2011 FIAT500L_1 FIAT 500L 2014 ALFAGIULIA_1 Alfa Romeo Giulia 2016 JEEPR_1 Jeep Renegade 2015

Tabella: auto

SELECT marca, COUNT(*) AS NumeroAuto FROM auto GROUP BY marca;

marca

NumeroAuto

FIAT 3

Alfa Romeo 1

Jeep 1

(22)

Esempio 2

Tabella: impiegato

SELECT sede, AVG(salario_annuo) AS SalarioMedio

FROM impiegato

GROUP BY sede;

matricola

nome

cognome

salario_annuo

sede

0101 Giorgio Blu 22000 Fisciano 0210 Mario Rossi 28900 Fisciano 0451 Luigi Bianchi 24000 Salerno 54023 Maria Giallo 23000 Baronissi

4124 Guido Viola 19000 Salerno

sede

SalarioMedio

Fisciano 25450 Salerno 21500 Baronissi 23000

I Raggruppamenti – 4/5

(23)

Esempio 3

Tabella: studente

SELECT corso_laurea, AVG(voto_laurea) AS VotoMedio

FROM studente

GROUP BY corso_laurea;

corso_laurea

VotoMedio

ING_GEST 95 ING_MECC 95

matricola

nome

cognome

voto_laurea

corso_laurea

00001

Mario

Rossi

100

ING_GEST

00002

Giovanni

Gialli

95

ING_MECC

00003

Mario

Blu

90

ING_GEST

00005

Alfonso

Magenta

93

ING_MECC

00012

Giorgio

Bianchi

97

ING_MECC

(24)

La clausola GROUP BY in combinazione con la

clausola HAVING

Permette di definire un vincolo sui dati risultanti

dall'operazione di raggruppamento

Sostanzialmente la clausola HAVING ha un

comportamento simile a quello della clausola

WHERE, ma opera sui raggruppamenti e non sui

record

(25)

Esempio

Raggruppamenti con Condizioni – 2/2

SELECT marca, COUNT(*) AS NumeroAuto

FROM auto

GROUP BY marca

HAVING COUNT(*) > 1;

autoID

marca

modello

immatricolazione

FIAT500_1 FIAT 500 2011 FIAT500L_1 FIAT 500L 2014 ALFAGIULIA_1 Alfa Romeo Giulia 2016 JEEPR_1 Jeep Renegade 2015 FIAT500_2 FIAT 500 NULL

Tabella: auto

marca

NumeroAuto

Riferimenti

Documenti correlati

Siamo concessionaria ufficiale FCA per i brand Fiat, Alfa Romeo, Lancia, Fiat Professional, Abarth e Jeep con una presenza capillare sul territorio piemontese grazie a 7 sedi

Siamo concessionaria ufficiale FCA per i brand Fiat, Alfa Romeo, Lancia, Fiat Professional, Abarth e Jeep con una presenza capillare sul territorio piemontese grazie a 7 sedi

Siamo concessionaria ufficiale FCA per i brand Fiat, Alfa Romeo, Lancia, Fiat Professional, Abarth e Jeep con una presenza capillare sul territorio piemontese grazie a 7 sedi

Siamo concessionaria ufficiale FCA per i brand Fiat, Alfa Romeo, Lancia, Fiat Professional, Abarth e Jeep con una presenza capillare sul territorio piemontese grazie a 7 sedi

Siamo concessionaria ufficiale FCA per i brand Fiat, Alfa Romeo, Lancia, Fiat Professional, Abarth e Jeep con una presenza capillare sul territorio piemontese grazie a 7 sedi

Siamo concessionaria ufficiale FCA per i brand Fiat, Alfa Romeo, Lancia, Fiat Professional, Abarth e Jeep con una presenza capillare sul territorio piemontese grazie a 7 sedi

Siamo concessionaria ufficiale FCA per i brand Fiat, Alfa Romeo, Lancia, Fiat Professional, Abarth e Jeep con una presenza capillare sul territorio piemontese grazie a 7 sedi

Siamo concessionaria ufficiale FCA per i brand Fiat, Alfa Romeo, Lancia, Fiat Professional, Abarth e Jeep con una presenza capillare sul territorio piemontese grazie a 7 sedi