DROP TABLE ARGOMENTI;
DROP TABLE POST;
DROP TABLE LIKE;

CREATE TABLE ARGOMENTI (
	ARGID 	 CHAR(6) NOT NULL PRIMARY KEY,
	TITOLO 	 VARCHAR(30) NOT NULL,
	DATACREAZIONE DATE NOT NULL,
	CREATODA CHAR(10) NOT NULL		);

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

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


INSERT INTO ARGOMENTI VALUES
('A00001','Presentazioni','01/11/2017','IlBoss'),
('A00002','Commenti vari','10/11/2017','IlBoss'),
('A00003','Vacanze','24/11/2017','La nera'),
('A00004','Cerco passaggio','04/12/2017','Il rosso')
;

INSERT INTO POST VALUES
(1001,'A00001','IlBoss','01/11/2017','Ciao a tutti, qui ci si presenta :-)'),
(1002,'A00001','Il rosso','01/11/2017','Eccomi, sono Il rosso e vengo da Rimini'),
(1003,'A00001','Il verde','02/11/2017','Io invece sono di Ancona!' ),


(2001,'A00002','Il rosso','12/11/2017','Questo forum langue!' ),
(2002,'A00002','Il bianco','12/11/2017','Vero, non succede nulla!' ),
(2003,'A00002','La nera','13/11/2017','Quasi quasi me ne vado via!' ),


(3001,'A00003','La nera','24/11/2017','Ragazzi, che fate a Natale??' ),
(3002,'A00003','Il giallo','25/11/2017','Io parto per il Messico!' ),
(3003,'A00003','Il blu','25/11/2017','Scusa, ma tu chi sei???' ),
(3004,'A00003','Il giallo','25/11/2017','Uno che va in Messico ;-)' ),
(3005,'A00003','Il blu','25/11/2017','Che fai, prendi in giro??' ),

(4001,'A00004','Il rosso','04/12/2017','Qualcuno ha un passaggio per Rimini il 22?' ),
(4002,'A00004','Il giallo','05/12/2017','No, mi spiace, io vado in Messico' )
;

INSERT INTO LIKE VALUES
('Il rosso',1001,'01/11/2017'),
('IlBoss',1002,'01/11/2017'),
('IlBoss',1003,'02/11/2017'),

('Il bianco',2001,'13/11/2017'),
('La nera',2001,'13/11/2017'),
('La nera',2002,'13/11/2017'),

('Il giallo',3001,'25/11/2017'),
('La nera',3002,'25/11/2017'),
('Il rosso',3002,'25/11/2017'),
('IlBoss',3003,'26/11/2017'),

('Il rosso',4002,'05/12/2017')
;



-- 2.1
SELECT 	L.User AS Utente, COUNT(*) AS NumLike
FROM   	ARGOMENTI A, POST P, LIKE L
WHERE	L.PID = P.PID 
AND	P.ArgID = A.ArgID
AND	A.CreatoDa <> L.user
AND 	L.User IN (SELECT CreatoDa FROM Argomenti)
GROUP BY L.User;


-- 2.2
WITH 
NUM_USERS (Argomento, NumUtenti) AS (
SELECT P.ArgID, COUNT(DISTINCT P.User) 
	FROM	 POST P 
	WHERE	 P.User NOT IN ( SELECT  P1.User
				 FROM	 POST P1
				 WHERE	 P1.ArgID <> P.ArgID )
	GROUP BY P.ArgID 					)

SELECT 	A.*,NU.NumUtenti
FROM	NUM_USERS NU, ARGOMENTI A
WHERE	A.ArgID = NU.Argomento
AND	NU.NumUtenti = ( SELECT MAX(NU1.NumUtenti)
		 	 FROM	NUM_USERS NU1	 );




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

