DROP TABLE PRODOTTI;
DROP TABLE RECLAMI;
DROP TABLE ESITI;

CREATE TABLE PRODOTTI (
	PRODID CHAR(6) NOT NULL PRIMARY KEY,
	CATEGORIA VARCHAR(30) NOT NULL,
	PREZZO DEC(8,2) NOT NULL CHECK (PREZZO > 0)   );

CREATE TABLE RECLAMI (
	RID CHAR(5) NOT NULL PRIMARY KEY,
	PRODID CHAR(6) NOT NULL REFERENCES PRODOTTI,
	DATA DATE NOT NULL,
	CLIENTE VARCHAR(10) NOT NULL,
	MOTIVO VARCHAR(20) NOT NULL		);

CREATE TABLE ESITI (
	RID CHAR(5) NOT NULL PRIMARY KEY REFERENCES RECLAMI,
	DATASOLUZIONE DATE NOT NULL,
	ESITO VARCHAR(10) NOT NULL,
	RIMBORSO DEC(8,2)    );

GRANT SELECT,INSERT ON PRODOTTI TO PUBLIC;
GRANT SELECT,INSERT ON RECLAMI TO PUBLIC;
GRANT SELECT,INSERT ON ESITI TO PUBLIC;

-- 2.1
SELECT	P.Categoria, AVG(CAST(DAYS(E.DataSoluzione)-DAYS(R.Data) AS DEC(6,2)) AS NumMedioGiorni
FROM	PRODOTTI P, RECLAMI R, ESITI E
WHERE	P.ProdID = R.ProdID
AND	R.RID = E.RID
AND	E.Esito = 'RESPINTO'
GROUP BY P.Categoria;

-- 2.2
WITH CAT_ESITI (Categoria,Esito,NumReclami) AS (
	SELECT	P.Categoria, E.Esito, COUNT(*)
	FROM	PRODOTTI P, RECLAMI R, ESITI E
	WHERE	P.ProdID = R.ProdID
	AND	R.RID = E.RID
	GROUP BY P.Categoria, E.Esito		)
SELECT CE.Esito, CE.Categoria
FROM   CAT_ESITI CE
WHERE  CE.NumReclami >= ALL ( SELECT CE1.NumReclami
	      		     FROM   CAT_ESITI CE1
	      		     WHERE  CE1.Esito = CE.Esito    );



INSERT INTO PRODOTTI VALUES
('P11111','elettrodomestici',150),
('P11222','elettrodomestici',90),
('P11333','elettrodomestici',250),
('P22145','casalinghi',80),
('P22346','casalinghi',120),
('P22457','casalinghi',30),
('P22689','casalinghi',40),
('P31414','HiFi',70)
;

INSERT INTO RECLAMI VALUES
('R0123','P11111','12/09/2011','Rossi','perde acqua'), 
('R0233','P11333','14/03/2012','Verdi','stira male'), 
('R0313','P11333','17/05/2012','Neri','scalda poco'), 
('R0415','P22145','09/04/2012','Bianchi','come funziona?'), 
('R0527','P22346','21/07/2012','Grigi','non mi piace'), 
('R0619','P22457','22/08/2012','Gialli','non funziona bene'),
('R0625','P22689','24/08/2012','Gialli','ho cambiato idea'),
('R0713','P31414','12/09/2012','Neri','suona male')
;


INSERT INTO ESITI VALUES
('R0123','25/09/2011','RIMBORSO',150),
('R0233','16/04/2012','RIMBORSO',220),
('R0415','13/04/2012','RESPINTO',NULL),
('R0527','28/07/2012','RIMBORSO',120),
('R0619','28/08/2012','RIMBORSO',25),
('R0625','15/09/2012','SOSTITUITO',NULL),
('R0713','18/09/2012','RESPINTO',NULL)
;




