[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [violazione licenza] [translators] [docinfo] [indice analitico] [volume] [parte]
L'aggregazione è una forma di interrogazione attraverso cui si ottengono risultati riepilogativi del contenuto di una relazione, nel suo complesso o a gruppi di tuple. Per questo si utilizzano delle funzioni speciali al posto dell'espressione che esprime gli attributi del risultato. Queste funzioni restituiscono un solo valore e come tali concorrono a creare un'unica tupla.
|
La forma che assume l'istruzione SELECT quando si usano le aggregazioni e tipicamente quella seguente:
SELECT specificazione_dell'attributo_1[,...specificazione_dell'attributo_n] FROM specificazione_della_relazione_1[,...specificazione_della_relazione_n] [WHERE condizione] [GROUP BY attributo_1[,...]] |
In pratica, le funzioni aggreganti vanno usate nell'elenco che descrive gli attributi. Se non si usa l'opzione GROUP BY, il gruppo di tuple di riferimento comprende tutte le tuple della relazione o della congiunzione (di relazioni). Se si specifica l'opzione GROUP BY, le tuple vengono raggruppate in base all'uguaglianza degli attributi indicati come argomento di tale opzione. In pratica:
la relazione ottenuta dall'istruzione SELECT...FROM viene filtrata dalla condizione WHERE;
la relazione risultante viene riordinata in modo da raggruppare le tuple in cui i contenuti degli attributi elencati dopo l'opzione GROUP BY sono uguali;
su questi gruppi di tuple vengono valutate le funzioni di aggregazione.
Per prendere un po' di dimestichezza con le aggregazioni, conviene usare il programma sqlite3 in modo interattivo e fare qualche piccolo esperimento:
$
sqlite3 mag.db
[Invio]
SQLite version ... Enter ".help" for instructions |
sqlite>
.headers on
[Invio]
sqlite>
.mode column
[Invio]
Si vogliono contare le tuple della relazione Movimenti:
sqlite>
SELECT COUNT(*) FROM Movimenti;
[Invio]
10 |
Si vogliono contare i movimenti per ogni tipo di articolo:
sqlite>
SELECT Articolo, COUNT(*) FROM Movimenti GROUP BY Articolo;
[Invio]
Articolo COUNT(*) ---------- ---------- 2 2 102 3 401 3 601 2 |
Si vuole conoscere la quantità esistente di ogni articolo (si usa la vista MovimentiExtra, che offre l'attributo QuantitaAlgebrica):
sqlite>
SELECT Articolo, SUM(QuantitaAlgebrica)
[Invio]
...>
FROM MovimentiExtra GROUP BY Articolo;
[Invio]
Articolo SUM(QuantitaAlgebrica) ---------- ---------------------- 2 9000 102 800 401 700 601 1000 |
Si vuole conoscere la quantità esistente di ogni articolo in magazzino e il valore (il valore viene calcolato a partire da quello medio, moltiplicato per la quantità algebrica):
sqlite>
SELECT Articolo, SUM(QuantitaAlgebrica),
[Invio]
...>
SUM(QuantitaAlgebrica*ValoreUnitario)
[Invio]
...>
FROM MovimentiExtra GROUP BY Articolo;
[Invio]
Articolo SUM(QuantitaAlgebrica) SUM(QuantitaAlgebrica*ValoreUnitario) ---------- ---------------------- ------------------------------------- 2 9000 90 102 800 160 401 700 140 601 1000 500 |
Si vuole conoscere la quantità esistente di ogni articolo in magazzino e il costo medio, determinato dividendo il valore complessivo per la quantità esistente:
sqlite>
SELECT Articolo, SUM(QuantitaAlgebrica),
[Invio]
sqlite>
SUM(QuantitaAlgebrica*ValoreUnitario)/SUM(QuantitaAlgebrica)
[Invio]
sqlite>
FROM MovimentiExtra GROUP BY Articolo;
[Invio]
Articolo SUM(QuantitaAlgebrica) SUM(QuantitaAlgebrica*ValoreUnitario)/SUM(QuantitaAlgebrica) ---------- ---------------------- ------------------------------------------------------------ 2 9000 0.01 102 800 0.2 401 700 0.2 601 1000 0.5 |
sqlite>
.quit
[Invio]
Si vuole realizzare la vista SituazioneMagazzino che, in questa verifica, si limiti a mostrare poche informazioni riepilogative sullo stato del magazzino.
Si realizzi il file vista-situazione-magazzino-1.sql
, seguendo lo scheletro che viene proposto, per far sì che la vista SituazioneMagazzino contenga gli attributi seguenti:
Codice, corrispondente al codice articolo della relazione Movimenti o della vista MovimentiExtra;
Articolo, corrispondente alla descrizione dell'articolo, come indicato nella relazione Articoli;
Esistenza, corrispondente alla somma algebrica dei carichi, come si ottiene dalla vista MovimentiExtra.
|
Per eseguire il file vista-situazione-magazzino-1.sql
, si agisce come sempre:
$
sqlite3 mag.db < vista-situazione-magazzino-1.sql
[Invio]
Se la creazione della vista produce degli errori, occorre eliminare la vista e, dopo la correzione del file vista-situazione-magazzino-1.sql
, si può ritentare.
Quando si è consapevoli di avere creato correttamente la vista SituazioneMagazzino, la si può interrogare come se fosse una relazione normale:
$
sqlite3 mag.db
[Invio]
SQLite version ... Enter ".help" for instructions |
sqlite>
.headers on
[Invio]
sqlite>
.mode column
[Invio]
sqlite>
SELECT * FROM SituazioneMagazzino;
[Invio]
Si dovrebbe ottenere il listato seguente:
Codice Articolo Esistenza ---------- -------------------------------------- ---------- 2 Dischetti da 9 cm 1440 Kibyte colorati 9000 102 CD-R 52x 800 401 DVD+R 8x 700 601 DVD+RW 8x 1000 |
Se tutto funziona regolarmente, si consegni per la valutazione la stampa del file vista-situazione-magazzino-1.sql
.
Si vuole estendere la vista SituazioneMagazzino, già realizzata in parte nella verifica precedente; pertanto, in questa verifica si modifica il file vista-situazione-magazzino-1.sql
Salvandolo con il nome vista-situazione-magazzino-2
. Si vogliono ottenere gli attributi seguenti:
Codice, corrispondente al codice articolo della relazione Movimenti o della vista MovimentiExtra;
Articolo, corrispondente alla descrizione dell'articolo, come indicato nella relazione Articoli;
ScortaMin, corrispondente alla scorta minima, come contenuto nella relazione Articoli;
Esistenza, corrispondente alla somma algebrica dei carichi, come si ottiene dalla vista MovimentiExtra;
Valore, corrispondente al valore complessivo di ogni articolo (come mostrato negli esempi prima di queste verifiche).
|
Prima di poter eseguire questo file con la base di dati, occorre eliminare la vista SituazioneMagazzino, che già dovrebbe esistere. Si ricorda che per eliminare una vista si utilizza l'istruzione DROP VIEW e che conviene intervenire con il programma sqlite3 in modo interattivo.
Per eseguire il file vista-situazione-magazzino-2.sql
, si agisce come sempre:
$
sqlite3 mag.db < vista-situazione-magazzino-2.sql
[Invio]
Se la creazione della vista produce degli errori, occorre eliminare la vista e, dopo la correzione del file vista-situazione-magazzino-2.sql
, si può ritentare.
Quando si è consapevoli di avere creato correttamente la vista SituazioneMagazzino, la si può interrogare come se fosse una relazione normale:
$
sqlite3 mag.db
[Invio]
SQLite version ... Enter ".help" for instructions |
sqlite>
.headers on
[Invio]
sqlite>
.mode column
[Invio]
sqlite>
SELECT * FROM SituazioneMagazzino;
[Invio]
Si dovrebbe ottenere il listato seguente:
Codice Articolo ScortaMin Esistenza Valore ---------- -------------------------------------- ---------- ---------- ---------- 2 Dischetti da 9 cm 1440 Kibyte colorati 500 9000 90 102 CD-R 52x 500 800 160 401 DVD+R 8x 200 700 140 601 DVD+RW 8x 200 1000 500 |
Se tutto funziona regolarmente, si consegni per la valutazione la stampa del file vista-situazione-magazzino-2.sql
.
Si vuole estendere la vista SituazioneMagazzino, già realizzata in parte nella verifica precedente, in modo ottenere anche il costo medio; pertanto, in questa verifica si modifica il file vista-situazione-magazzino-2.sql
salvandolo con il nome vista-situazione-magazzino-3.sql
. Si vogliono ottenere gli attributi seguenti:
Codice, corrispondente al codice articolo della relazione Movimenti o della vista MovimentiExtra;
Articolo, corrispondente alla descrizione dell'articolo, come indicato nella relazione Articoli;
ScortaMin, corrispondente alla scorta minima, come contenuto nella relazione Articoli;
Esistenza, corrispondente alla somma algebrica dei carichi, come si ottiene dalla vista MovimentiExtra;
Valore, corrispondente al valore complessivo di ogni articolo (come mostrato negli esempi prima di queste verifiche);
CostoMedio, corrispondente al valore complessivo di ogni articolo, diviso la quantità esistente (come mostrato negli esempi prima di queste verifiche).
|
Prima di poter eseguire questo file con la base di dati, occorre eliminare la vista SituazioneMagazzino, che già dovrebbe esistere. Si ricorda che per eliminare una vista si utilizza l'istruzione DROP VIEW e che conviene intervenire con il programma sqlite3 in modo interattivo.
Per eseguire il file vista-situazione-magazzino-3.sql
, si agisce come sempre:
$
sqlite3 mag.db < vista-situazione-magazzino-3.sql
[Invio]
Se la creazione della vista produce degli errori, occorre eliminare la vista e, dopo la correzione del file vista-situazione-magazzino-3.sql
, si può ritentare.
Quando si è consapevoli di avere creato correttamente la vista SituazioneMagazzino, la si può interrogare come se fosse una relazione normale:
$
sqlite3 mag.db
[Invio]
SQLite version ... Enter ".help" for instructions |
sqlite>
.headers on
[Invio]
sqlite>
.mode column
[Invio]
sqlite>
SELECT * FROM SituazioneMagazzino;
[Invio]
Si dovrebbe ottenere il listato seguente:
Codice Articolo ScortaMin Esistenza Valore CostoMedio ------ -------------------------------------- --------- --------- ------ ---------- 2 Dischetti da 9 cm 1440 Kibyte colorati 500 9000 90 0.01 102 CD-R 52x 500 800 160 0.2 401 DVD+R 8x 200 700 140 0.2 601 DVD+RW 8x 200 1000 500 0.5 |
Se tutto funziona regolarmente, si consegni per la valutazione la stampa del file vista-situazione-magazzino-3.sql
.
Prima di passare al capitolo successivo, si deve riprendere il file magazzino.sql
e vi si deve aggiungere l'istruzione per la creazione della vista SituazioneMagazzino, come realizzato nel'ultima verifica appena conclusa.
Una volta aggiornato il file magazzino.sql
come descritto, si deve cancellare il file mag.db
e ricreare a partire dalle istruzioni contenute nel file magazzino.sql
:
$
sqlite3 mag.db < magazzino.sql
[Invio]
Se vengono segnalati degli errori, occorre correggere il file magazzino.sql
, cancellare nuovamente il file mag.db
, quindi si deve ripetere l'operazione. La base di dati contenuta nel file mag.db
, viene usata nel capitolo successivo e non si può proseguire se non si riesce a ricrearla correttamente.
Appunti di informatica libera 2006.01.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>, <daniele·giacomini (ad) poste·it>
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome aggregazioni.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [violazione licenza] [translators] [docinfo] [indice analitico]
Static Wikipedia
(no
images)
aa
- ab
- af
- ak
- als
- am
- an
- ang
- ar
- arc
- as
- ast
- av
- ay
- az
- ba
- bar
- bat_smg
- bcl
- be
- be_x_old
- bg
- bh
- bi
- bm
- bn
- bo
- bpy
- br
- bs
- bug
- bxr
- ca
- cbk_zam
- cdo
- ce
- ceb
- ch
- cho
- chr
- chy
- co
- cr
- crh
- cs
- csb
- cu
- cv
- cy
- da
- de
- diq
- dsb
- dv
- dz
- ee
- el
- eml
- en
- eo
- es
- et
- eu
- ext
- fa
- ff
- fi
- fiu_vro
- fj
- fo
- fr
- frp
- fur
- fy
- ga
- gan
- gd
- gl
- glk
- gn
- got
- gu
- gv
- ha
- hak
- haw
- he
- hi
- hif
- ho
- hr
- hsb
- ht
- hu
- hy
- hz
- ia
- id
- ie
- ig
- ii
- ik
- ilo
- io
- is
- it
- iu
- ja
- jbo
- jv
- ka
- kaa
- kab
- kg
- ki
- kj
- kk
- kl
- km
- kn
- ko
- kr
- ks
- ksh
- ku
- kv
- kw
- ky
- la
- lad
- lb
- lbe
- lg
- li
- lij
- lmo
- ln
- lo
- lt
- lv
- map_bms
- mdf
- mg
- mh
- mi
- mk
- ml
- mn
- mo
- mr
- mt
- mus
- my
- myv
- mzn
- na
- nah
- nap
- nds
- nds_nl
- ne
- new
- ng
- nl
- nn
- no
- nov
- nrm
- nv
- ny
- oc
- om
- or
- os
- pa
- pag
- pam
- pap
- pdc
- pi
- pih
- pl
- pms
- ps
- pt
- qu
- quality
- rm
- rmy
- rn
- ro
- roa_rup
- roa_tara
- ru
- rw
- sa
- sah
- sc
- scn
- sco
- sd
- se
- sg
- sh
- si
- simple
- sk
- sl
- sm
- sn
- so
- sr
- srn
- ss
- st
- stq
- su
- sv
- sw
- szl
- ta
- te
- tet
- tg
- th
- ti
- tk
- tl
- tlh
- tn
- to
- tpi
- tr
- ts
- tt
- tum
- tw
- ty
- udm
- ug
- uk
- ur
- uz
- ve
- vec
- vi
- vls
- vo
- wa
- war
- wo
- wuu
- xal
- xh
- yi
- yo
- za
- zea
- zh
- zh_classical
- zh_min_nan
- zh_yue
- zu
-
Static Wikipedia 2007 (no
images)
aa
- ab
- af
- ak
- als
- am
- an
- ang
- ar
- arc
- as
- ast
- av
- ay
- az
- ba
- bar
- bat_smg
- bcl
- be
- be_x_old
- bg
- bh
- bi
- bm
- bn
- bo
- bpy
- br
- bs
- bug
- bxr
- ca
- cbk_zam
- cdo
- ce
- ceb
- ch
- cho
- chr
- chy
- co
- cr
- crh
- cs
- csb
- cu
- cv
- cy
- da
- de
- diq
- dsb
- dv
- dz
- ee
- el
- eml
- en
- eo
- es
- et
- eu
- ext
- fa
- ff
- fi
- fiu_vro
- fj
- fo
- fr
- frp
- fur
- fy
- ga
- gan
- gd
- gl
- glk
- gn
- got
- gu
- gv
- ha
- hak
- haw
- he
- hi
- hif
- ho
- hr
- hsb
- ht
- hu
- hy
- hz
- ia
- id
- ie
- ig
- ii
- ik
- ilo
- io
- is
- it
- iu
- ja
- jbo
- jv
- ka
- kaa
- kab
- kg
- ki
- kj
- kk
- kl
- km
- kn
- ko
- kr
- ks
- ksh
- ku
- kv
- kw
- ky
- la
- lad
- lb
- lbe
- lg
- li
- lij
- lmo
- ln
- lo
- lt
- lv
- map_bms
- mdf
- mg
- mh
- mi
- mk
- ml
- mn
- mo
- mr
- mt
- mus
- my
- myv
- mzn
- na
- nah
- nap
- nds
- nds_nl
- ne
- new
- ng
- nl
- nn
- no
- nov
- nrm
- nv
- ny
- oc
- om
- or
- os
- pa
- pag
- pam
- pap
- pdc
- pi
- pih
- pl
- pms
- ps
- pt
- qu
- quality
- rm
- rmy
- rn
- ro
- roa_rup
- roa_tara
- ru
- rw
- sa
- sah
- sc
- scn
- sco
- sd
- se
- sg
- sh
- si
- simple
- sk
- sl
- sm
- sn
- so
- sr
- srn
- ss
- st
- stq
- su
- sv
- sw
- szl
- ta
- te
- tet
- tg
- th
- ti
- tk
- tl
- tlh
- tn
- to
- tpi
- tr
- ts
- tt
- tum
- tw
- ty
- udm
- ug
- uk
- ur
- uz
- ve
- vec
- vi
- vls
- vo
- wa
- war
- wo
- wuu
- xal
- xh
- yi
- yo
- za
- zea
- zh
- zh_classical
- zh_min_nan
- zh_yue
- zu
-
Static Wikipedia 2006 (no
images)
aa
- ab
- af
- ak
- als
- am
- an
- ang
- ar
- arc
- as
- ast
- av
- ay
- az
- ba
- bar
- bat_smg
- bcl
- be
- be_x_old
- bg
- bh
- bi
- bm
- bn
- bo
- bpy
- br
- bs
- bug
- bxr
- ca
- cbk_zam
- cdo
- ce
- ceb
- ch
- cho
- chr
- chy
- co
- cr
- crh
- cs
- csb
- cu
- cv
- cy
- da
- de
- diq
- dsb
- dv
- dz
- ee
- el
- eml
- eo
- es
- et
- eu
- ext
- fa
- ff
- fi
- fiu_vro
- fj
- fo
- fr
- frp
- fur
- fy
- ga
- gan
- gd
- gl
- glk
- gn
- got
- gu
- gv
- ha
- hak
- haw
- he
- hi
- hif
- ho
- hr
- hsb
- ht
- hu
- hy
- hz
- ia
- id
- ie
- ig
- ii
- ik
- ilo
- io
- is
- it
- iu
- ja
- jbo
- jv
- ka
- kaa
- kab
- kg
- ki
- kj
- kk
- kl
- km
- kn
- ko
- kr
- ks
- ksh
- ku
- kv
- kw
- ky
- la
- lad
- lb
- lbe
- lg
- li
- lij
- lmo
- ln
- lo
- lt
- lv
- map_bms
- mdf
- mg
- mh
- mi
- mk
- ml
- mn
- mo
- mr
- mt
- mus
- my
- myv
- mzn
- na
- nah
- nap
- nds
- nds_nl
- ne
- new
- ng
- nl
- nn
- no
- nov
- nrm
- nv
- ny
- oc
- om
- or
- os
- pa
- pag
- pam
- pap
- pdc
- pi
- pih
- pl
- pms
- ps
- pt
- qu
- quality
- rm
- rmy
- rn
- ro
- roa_rup
- roa_tara
- ru
- rw
- sa
- sah
- sc
- scn
- sco
- sd
- se
- sg
- sh
- si
- simple
- sk
- sl
- sm
- sn
- so
- sr
- srn
- ss
- st
- stq
- su
- sv
- sw
- szl
- ta
- te
- tet
- tg
- th
- ti
- tk
- tl
- tlh
- tn
- to
- tpi
- tr
- ts
- tt
- tum
- tw
- ty
- udm
- ug
- uk
- ur
- uz
- ve
- vec
- vi
- vls
- vo
- wa
- war
- wo
- wuu
- xal
- xh
- yi
- yo
- za
- zea
- zh
- zh_classical
- zh_min_nan
- zh_yue
- zu
Static Wikipedia February 2008 (no images)
aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu