-
Notifications
You must be signed in to change notification settings - Fork 0
/
LAB3DB.txt
155 lines (140 loc) · 4.14 KB
/
LAB3DB.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
--------------------------------------
ESERCIZIO 1
--------------------------------------
WITH TABCOUNT AS (
SELECT FID, DATA, COUNT(*) NumeroMulte
FROM MULTE
GROUP BY FID, DATA)
SELECT MAX(NumeroMulte)
FROM TABCOUNT;
--------------------------------------
ESERCIZIO 2
--------------------------------------
-- Calcolare il costo totale delle multe ricevute da ciascun fattorino.
-- Quindi, calcolare la media dei costi totali dei fattorini
WITH COSTI_TOT AS (SELECT FID, SUM(COSTO) COSTO_TOT
FROM MULTE
GROUP BY FID)
SELECT AVG(COSTO_TOT)
FROM COSTI_TOT
--------------------------------------
ESERCIZIO 3
--------------------------------------
-- Per ogni azienda, trovare l'identificativo del
-- fattorino che ha effettuato più consegne
WITH MAXCONSPERAZIENDA AS(
SELECT AID, MAX(NUMCONSEGNE) MAXCONS
FROM CONSEGNA
GROUP BY AID)
SELECT C.AID, C.FID
FROM CONSEGNA C, MAXCONSPERAZIENDA M
WHERE C.AID=M.AID
AND C.NUMCONSEGNE=M.MAXCONS;
--------------------------------------
ESERCIZIO 4
--------------------------------------
-- Per ogni azienda, trovare l'identificativo del fattorino maschio e
-- l'identificativo del fattorino femmina che hanno effettuato più consgene
WITH MAXCONSPERAZIENDA AS (
SELECT C.AID, F.SESSO, MAX(NUMCONSEGNE) MAXCONS
FROM CONSEGNA C, FATTORINO F
WHERE C.FID=F.FID
GROUP BY C.AID, F.SESSO)
SELECT C.AID, C.FID, M.SESSO
FROM CONSEGNA C, MAXCONSPERAZIENDA M
WHERE C.AID=M.AID
AND C.NUMCONSEGNE=M.MAXCONS
--------------------------------------
ESERCIZIO 5
--------------------------------------
WITH COSTI_TOT AS (
SELECT FID, SUM(COSTO) COSTO_TOT
FROM MULTE
GROUP BY FID),
MEDIACOSTI AS (
SELECT AVG(COSTO) COSTOMEDIO
FROM MULTE)
SELECT F.FID, F.NOME, C.COSTO_TOT
FROM COSTI_TOT C, FATTORINO F, MEDIACOSTI M
WHERE C.FID = F.FID
AND C.COSTO_TOT>M.COSTOMEDIO;
--------------------------------------
ESERCIZIO 6
--------------------------------------
WITH COSTOMEDIOPERANNO AS (
SELECT EXTRACT(YEAR FROM MULTE.DATA) Y, AVG(MULTE.COSTO) COSTOMEDIO
FROM MULTE
GROUP BY EXTRACT(YEAR FROM MULTE.DATA)
)
SELECT M.MID, M.DATA, M.COSTO, C.COSTOMEDIO
FROM COSTOMEDIOPERANNO C, MULTE M
WHERE C.Y=EXTRACT(YEAR FROM M.DATA)
AND M.COSTO > C.COSTOMEDIO
--------------------------------------
ESERCIZIO 7
--------------------------------------
WITH NUMCONSPERF AS (
SELECT FID, SUM(NUMCONSEGNE) TOTCONS
FROM CONSEGNA
GROUP BY FID
),
MEDIACONS_TAB AS (
SELECT AVG(TOTCONS) AS MEDIACONS
FROM NUMCONSPERF
),
MEDIACONSPERCITTA AS (
SELECT CITTA, AVG(TOTCONS) MEDIA
FROM FATTORINO F, NUMCONSPERF C
WHERE C.FID = F.FID
GROUP BY CITTA
)
SELECT CITTA, MC.MEDIA, M.MEDIACONS
FROM MEDIACONSPERCITTA MC, MEDIACONS_TAB M
WHERE MC.MEDIA<M.MEDIACONS;
--------------------------------------
ESERCIZIO 8
--------------------------------------
WITH RITIRIPERF AS (
SELECT FID, SUM(NUMRITIRI) TOT_RITIRI
FROM CONSEGNA
GROUP BY FID
),
MEDIARITIRIPERANNO_TAB AS (
SELECT ANNO_NASCITA, AVG(TOT_RITIRI) MEDIARITIRIPERANNO
FROM RITIRIPERF R, FATTORINO F
WHERE F.FID = R.FID
GROUP BY ANNO_NASCITA
)
SELECT MR.ANNO_NASCITA
FROM MEDIARITIRIPERANNO_TAB MR
WHERE MR.MEDIARITIRIPERANNO=(SELECT MAX(MEDIARITIRIPERANNO) FROM MEDIARITIRIPERANNO_TAB);
--------------------------------------
ESERCIZIO 9
--------------------------------------
-- Identificare il genere e il numero di multe ricevute
-- dal genere dei fattorini con il maggior
-- numero di multe presenti nella base dati.
WITH MULTEPERGENDER AS (
SELECT SESSO, COUNT(*) NUM_MULTE
FROM MULTE M, FATTORINO F
WHERE M.FID = F.FID
GROUP BY SESSO
)
SELECT SESSO, NUM_MULTE
FROM MULTEPERGENDER MG
WHERE MG.NUM_MULTE=(SELECT MAX(NUM_MULTE) FROM MULTEPERGENDER)
--------------------------------------
ESERCIZIO 10
--------------------------------------
-- Trovare il genere e il numero di consegne
-- effettuate dal genere che ha effettuato il
-- maggior numero di consegne.
WITH CONSPERGENDER AS (
SELECT SESSO, SUM(NUMCONSEGNE) TOTCONS
FROM FATTORINO F, CONSEGNA C
WHERE F.FID = C.FID
GROUP BY SESSO
)
SELECT SESSO, TOTCONS
FROM CONSPERGENDER CG
WHERE CG.TOTCONS = (SELECT MAX(TOTCONS) FROM CONSPERGENDER CG)