Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Save to My Library
Look up keyword
Like this
2Activity
0 of .
Results for:
No results containing your search query
P. 1
SQL_m9 Raggruppamenti

SQL_m9 Raggruppamenti

Ratings: (0)|Views: 79 |Likes:
Published by Cinzia Bocchi

More info:

Published by: Cinzia Bocchi on Dec 08, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

02/25/2013

pdf

text

original

 
SQL: Raggruppamenti e clausola GROUP BYLa clausola GROUP BY
Per introdurre i raggruppamenti, consideriamo la seguente tabella:
DIPENDENTI
matr cognome ruolo stipendio anzianità
101 Rossi direttore 100 senior102 Bianchi impiegato 50 senior103 Verdi impiegato 45 junior104 Neri direttore 90 junior105 Gialli impiegato 60 senior106 Rosi impiegato 65 senior
Supponiamo di voler determinare la media e la somma degli stipendi dei dipendentisuddividendoli però in base al ruolo. Ciò che vogliamo ottenere, in sostanza, è un resultsetcome il seguente:
ruolo media somma
direttore 95 190impiegato 55 220
Per suddividere in gruppi le righe estratte occorre utilizzare la clausola
GROUP BY
, comemostrato nel seguente esempio:
SELECT
ruolo
,
AVG
(stipendio)
AS
media,
SUM
(stipendio)
AS
somma
FROM
dipendenti
GROUP BY
ruolo
Cerchiamo di capire meglio come avviene l’esecuzione del comando.
Per prima cosa, vengono selezionate le righe che soddisfano le condizioni presenti inWHERE. In questo esempio vengono selezionate tutte le righe, non essendo presentela clausola WHERE.
Successivamente, vengono raggruppate le varie righe in base ai campi specificati conla clausola GROUP BY. In questo caso vengono raggruppate le righe che hanno lostesso valore nel campo ruolo.
Infine, la clausola SELECT viene applicata a ciascun gruppo. Nell’esempio vengonocalcolate la media e la somma per ciascun gruppo.
La tabella risultante conterrà tante righe quanti sono i gruppi individuati e tante colonnequanti sono gli attributi e le funzioni di aggregazione definiti in SELECT.Il procedimento è rappresentato nella figura seguente.
Bocchi CinziaUltimo aggiornamento: 05/12/2012
1
 
DIPENDENTI
matr cognome ruolo stipendio anzianità
102 Bianchi impiegato 50 senior103 Verdi impiegato 45 junior105 Gialli impiegato 60 senior106 Rosi impiegato65
senior 
101 Rossi direttore 100 senior104 Neri direttore 90 junior
Osservazione importanteGli attributi presenti in SELECT devono essere presenti anche nella clausolaGROUP BY. Non vale il viceversa: in GROUP BY possono essere specificati attributiche non compaiono in SELECT.
Il motivo di questa restrizione può essere mostrato con un esempio. Supponiamo di voler eseguire la query seguente:
SELECT
ruolo
, anzianità,
AVG
(stipendio)
AS
media,
SUM
(stipendio)
AS
somma
FROM
dipendenti
GROUP BY
ruolo
L’attributo anzianità è presente in SELECT ma non in GROUP BY.Osservando la tabella ottenuta in precedenza si può notare che per ciascun gruppoesistono valori diversi del campo anzianità e questo fatto rende impossibile rappresentareun solo valore nella tabella risultante
ruolo anzianità media somma
direttore
?
95 190impiegato
?
55 220
Volendo rappresentare anche l’anzianità, dobbiamo aggiungere l’attributo alla clausolaGROUP BY.
SELECT
ruolo
,
anzianità
,
AVG
(stipendio)
AS
media,
SUM
(stipendio)
AS
somma
FROM
dipendenti
GROUP BY
ruolo, anzianità
Bocchi CinziaUltimo aggiornamento: 05/12/2012
2
gruppo impiegati:media=55somma=220gruppo direttori:media=95somma=190
senior o junior?
 
DIPENDENTI
matr cognome ruolo stipendio anzianità
102 Bianchi impiegato 50 senior105 Gialli impiegato 60 senior106 Rosi impiegato65
senior 
103 Verdi impiegato 45 junior101 Rossi direttore 100 senior104 Neri direttore 90 junior
I gruppi creati sono 4 e per ciascuno di essi vengono calcolate media e somma. Il resultsetsarà:
ruolo anzianità media somma
direttore senior 100 100direttore junior 90 90impiegato senior 58 175impiegato junior 45 45
Nel caso in cui non ci interessi mostrare l’anzianità nel resultset, potremo ometterel’attributo da SELECT, senza però eliminarlo da GROUP BY:
SELECT
ruolo
,
AVG
(stipendio)
AS
media,
SUM
(stipendio)
AS
somma
FROM
dipendenti
GROUP BY
ruolo, anzianità
ruolo media somma
direttore 100 100direttore 90 90impiegato 58 175impiegato 45 45
Come ulteriore esempio, supponiamo di voler calcolare il numero di dipendentiraggruppandoli in base al ruolo e all’anzianità di servizio.
SELECT
ruolo, anzianità,
COUNT
(*)
AS
numDipendenti
FROM
dipendenti
GROUP BY
ruolo, anzianità
Bocchi CinziaUltimo aggiornamento: 05/12/2012
3
impiegati senior:media=58somma=175direttori senior:media=100somma=100impiegati junior:media=45somma=45direttori junior:media=90somma=90

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->