DROP TABLE UTENTI;
DROP TABLE POST;
DROP TABLE LIKE;

CREATE TABLE UTENTI (
	USERNAME CHAR(10) NOT NULL PRIMARY KEY,
	NOME 	 VARCHAR(20) NOT NULL,
	COGNOME  VARCHAR(20) NOT NULL,
	DATAREGISTRAZIONE DATE NOT NULL	);

CREATE TABLE POST (
	PID 	INT NOT NULL PRIMARY KEY CHECK (PID > 0),
	USER 	CHAR(10) NOT NULL REFERENCES UTENTI,
	DATA 	DATE NOT NULL,
	TIME 	TIME NOT NULL,
	TESTO 	VARCHAR(50) NOT NULL		);

CREATE TABLE LIKE(
	USER 	CHAR(10) NOT NULL REFERENCES UTENTI,
	PID 	INT NOT NULL REFERENCES POST,
	DATA 	DATE NOT NULL,
	PRIMARY KEY (USER,PID)				);


INSERT INTO UTENTI VALUES
('Il rosso','Marco','Rossi','24/11/2017'),
('Il verde','Luca','Verdi','26/11/2017'),
('Il bianco','Massimo','Bianchi','15/01/2018'),
('La nera','Anna','Neri','19/01/2018')
;

INSERT INTO POST VALUES
(1001,'Il rosso','02/12/2017','12:57:29','quasi ora di pranzo...'),
(1002,'Il rosso','03/12/2017','11:43:12','c''e'' nessuno?'),
(1003,'Il verde','03/12/2017','11:47:21','eccomi, come va?' ),
(1004,'Il rosso','03/12/2017','12:15:16','insomma, e tu?' ),
(1005,'Il verde','03/12/2017','12:47:21','io bene, studio a parte' ),

(1027,'Il bianco','15/01/2018','10:14:25','un saluto a tutti!' ),
(1028,'Il rosso','15/01/2018','10:15:30','benvenuto!' ),
(1029,'Il verde','16/01/2018','10:16:23','wow, siamo in 3!!!' ),

(1040,'La nera','19/01/2018','16:17:02','Ci sono anch''io!' ),
(1041,'Il verde','19/01/2018','17:26:23','wow, addirittura 4!!!' ),
(1042,'Il bianco','19/01/2018','17:36:12','benvenuta' ),
(1043,'La nera','19/01/2018','17:41:45','grazie :)' )

;

INSERT INTO LIKE VALUES
('Il rosso',1003,'03/12/2017'),
('Il rosso',1005,'04/12/2017'),
('Il rosso',1027,'15/01/2018'),
('Il rosso',1040,'19/01/2018'),
('Il rosso',1041,'20/01/2018'),

('Il verde',1002,'03/12/2017'),
('Il verde',1027,'16/01/2018'),
('Il verde',1040,'19/01/2018'),

('Il bianco',1028,'16/01/2018'),
('Il bianco',1029,'17/01/2018'),
('Il bianco',1040,'20/01/2018'),
('Il bianco',1041,'21/01/2018'),

('La nera',1001,'19/01/2018'),
('La nera',1005,'19/01/2018'),
('La nera',1027,'19/01/2018'),
('La nera',1041,'19/01/2018')

;

-- 2.1
SELECT 	U.Username, COUNT(*) AS TOT_LIKE
FROM   	UTENTI U, POST P, LIKE L
WHERE	U.Username = P.User
AND	P.PID = L.PID
AND	DAYS(CURRENT DATE) - DAYS(U.DataRegistrazione) < 10
GROUP BY U.Username;


-- 2.2
WITH 
NUMLIKE_POST (Utente, PID, NumLike) AS (
	SELECT   P.User,P.PID,COUNT(L.Data) 
	FROM	 POST P LEFT JOIN LIKE L ON (P.PID = L.PID)
	GROUP BY P.PID,P.User 		),

MEDIE_LIKE (Utente,Media) AS (
	SELECT   N.Utente, CAST(AVG(N.NumLike/1.0) AS DEC(6,2)) 
	FROM	 NUMLIKE_POST N
	GROUP BY N.Utente	)

SELECT 	M1.*
FROM	MEDIE_LIKE M1
WHERE	M1.Media = ( SELECT MAX(M2.Media)
		     FROM   MEDIE_LIKE M2 );





GRANT SELECT ON UTENTI TO PUBLIC;
GRANT SELECT ON POST TO PUBLIC;
GRANT SELECT ON LIKE TO PUBLIC;

