CLIENTE(
Codice: String,
Nome: String,
Cognome: String,
TipoDoc: String,
NumeroDoc: String
)
BICILETTA(
Num-bici: String,
TIpoBici: String,
CostoOra: Real,
CostoGiorno: Real
)
PRENOTA(
Num-Cli(cliente): String,
TipoBici: String,
Giorno: Date,
OraInizio: Time,
OraFine: Time
)
USA(
Num-Cli(cliente): String,
Num-Bici(bicicletta): String,
Giorno: Date,
OraInizio: Time,
OraFine: Time
)
/* Aumentare del 10% il costo orario e giornaliero delle mountain bike */
UPDATE Bicicletta
SET CostoOra=CostoOra * 1.1, CostoGiorno = CostoGiorno*1.1
WHERE TipoBici='MB';
/* Aggiungere alla tabella CLIENTE l'attributo email. */
ALTER TABLE Cliente
ADD COLUMN email varchar(30) NOT NULL DEFAULT '[email protected]';
/* Trovare per ogni bici che è stata usata da almeno 7 clienti per più di un'ora
(si intende almeno un'ora per noleggio),
e che sia stata complessivamente noleggiata almeno 20 volte,
il codice e tipo di bici e le ore complessive di noleggio */
SELECT NumBici, TipoBici, SUM(OraFIne)-SUM(OraInizio)
FROM Usa NATURAL JOIN Biciletta
WHERE NumBici IN (
SELECT NumBici
FROM Usa
WHERE DATE_PART('hour', OraFine - OraInizio) > 1
GROUP BY NumBici
HAVING COUNT (*) >= 7
)
GROUP BY NumBici, TipoBici
HAVING COUNT(*) >= 20
/* Trovare, per ogni tipo di biciletta,
il cliente che l'ha usata il maggior numero di ore */
SELECT p.NumCli as Cliente, p.TipoBici as Tipologia,
SUM(DATE_PART('hour', u.OraFine - u.OraInizio) as Utilizzo
FROM Prenota p
JOIN Usa u ON p.NumCli = u.NumCli
GROUP BY p.NumCli, p.TipoBici
HAVING SUM(DATE_PART('hour', u.OraFine - u.OraInizio)) >= ALL (
DATE_PART('hour', u.OraFine - u.OraInizio) as Utilizzo
FROM Prenota pInt
JOIN Usa uInt ON pInt.NumCli = uInt.NumCli
WHERE p.NumCli <> pInt.NumCli
AND p.TipoBici = pInt.TipoBici
GROUP BY p.NumCli, p.TipoBici
)