Untitled

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

)


Untitled

/* 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

)