-- 1. Izdvojiti informacije o svim predmetima osim o onima koji nose najvise bodova.
--SELECT *
--FROM da.predmet
--WHERE espb < SOME(SELECT espb FROM da.predmet);
-- ANY/SOME

-- 2. Izdvojiti infomracije o studentima koji su se prvi upisali na fakultet.
--SELECT indeks, ime, prezime, datUpisa
--FROM da.dosije
--WHERE datUpisa <= ALL(SELECT datUpisa FROM da.dosije);

-- 3. Izdvojiti infomracije o studentima koji su se prvi diplomirali na fakultetu. (pri cemu diplomirao znaci da datDipl postoji)
--SELECT indeks, ime, prezime, datDiplomiranja
--FROM da.dosije
--WHERE datDiplomiranja <= ALL(SELECT datDiplomiranja FROM da.dosije WHERE datDiplomiranja IS NOT NULL);

-- 4.  Izdvojiti imena i prezimena studenata koji su polozili predmet ciji je identifikator 1578.
-- SELECT DISTINCT d.indeks, ime, prezime
-- FROM da.dosije d JOIN da.ispit i ON d.indeks=i.indeks
-- WHERE idPredmeta=1578 AND ocena>5 AND status='o';

-- SELECT indeks, ime, prezime
-- FROM da.dosije
-- WHERE indeks IN (SELECT indeks
--			      FROM da.ispit
--			      WHERE idPredmeta=1578 AND ocena>5 AND status='o');

--SELECT indeks, ime, prezime
--FROM da.dosije d
--WHERE 1578 IN (SELECT idPredmeta
--			    FROM da.ispit i
--			    WHERE i.indeks=d.indeks AND ocena>5 AND status='o');

-- SELECT indeks, ime, prezime
-- FROM da.dosije d
-- WHERE EXISTS(SELECT *
--			  FROM da.ispit
--			  WHERE indeks=d.indeks AND idPredmeta=1578 AND
--			  	        ocena>5 AND status='o');

-- 5.  Izdvojiti indekse, imena i prezimena studenata koji nisu polagali predmet ciji je identifikator 1578.
--SELECT indeks, ime, prezime
--FROM da.dosije d
--WHERE NOT EXISTS(SELECT *
--				 FROM da.ispit i
--				 WHERE indeks=d.indeks AND idPredmeta=1578);

-- 6. Izdvojiti  brojeve  indeksa,  imena  i  prezimena  studenta  koji  su  polagali predmet koji nosi 5 bodova.
--SELECT DISTINCT d.indeks, ime, prezime
--FROM da.dosije d JOIN da.ispit i ON d.indeks=i.indeks
 --   	       	      	    JOIN da.predmet p ON i.idPredmeta=p.id
--WHERE p.espb=5;

--SELECT indeks, ime, prezime
--FROM da.dosije d
--WHERE EXISTS(SELECT *
--			 FROM da.ispit i JOIN da.predmet p ON i.idPredmeta=p.id
--			 WHERE indeks=d.indeks AND p.espb=5);

--SELECT indeks, ime, prezime
--FROM da.dosije d
--WHERE EXISTS(SELECT *
--			 FROM da.ispit i
--			 WHERE indeks=d.indeks AND EXISTS(SELECT *
--										     FROM da.predmet p
--										     WHERE id=i.idPredmeta AND espb=5));

-- 7. Prikazati brojeve indeksa, imena i prezimena studenata koji su polozili sve predmete.
-- SELECT indeks, ime, prezime
-- FROM da.dosije d
-- WHERE NOT EXISTS(SELECT *
-- 				 FROM da.predmet p
--				 WHERE NOT EXISTS(SELECT *
--								  FROM da.ispit i
--								  WHERE indeks=d.indeks AND
--								  	       idPredmeta=p.id AND
--									       ocena>5 AND status='o'));
-- Logicki: Vx p(x) <=> !Ex !p(x)

-- 8. Prikazati brojeve indeksa studenata koji su polozili bar one predmete koje i student sa brojem indeksa 20150174.

--SELECT idPredmeta
--FROM da.ispit
--WHERE indeks=20150174 AND ocena>5 AND status='o';

-- Vp pol(20150174, p) => pol(d, p)
-- p, q, p => q
-- T, T, T
-- T, F, F
-- F, T, T
-- F, F, T
-- p=>q ekviv. !p v q
-- Vp !pol(20150174, p) V pol(d, p)
-- !Ep pol(20150174, p) ^ !pol(d, p)
--SELECT indeks, ime, prezime
--FROM da.dosije d
--WHERE NOT EXISTS(SELECT *
--				 FROM da.ispit i
--				 WHERE indeks=20150174 AND ocena>5 AND status='o' AND
--				              NOT EXISTS(SELECT *
--								  FROM da.ispit i1
--								  WHERE indeks=d.indeks AND idPredmeta=i.idPredmeta AND
--								  	       ocena>5 AND status='o'));

-- 9.  Za  svaki  ispit  izdvojiti  indeks,  idpredmeta  i  dobijenu  ocenu.
--      Vrednost ocene ispisati i slovima.
-- 	Ako je predmet nepolozen umesto ocene ispisati nepolozen.
SELECT indeks, idPredmeta, ocena,
             CASE ocena
	     	  WHEN 6 THEN 'sest'
		  WHEN 7 THEN 'sedam'
		  WHEN 8 THEN 'osam'
		  WHEN 9 THEN 'devet'
		  WHEN 10 THEN 'deset'
		  ELSE 'nepolozen'
	     END AS ocena
FROM da.ispit
LIMIT 30;

-- 10. Klasifikovati predmete prema broju bodova na sledeci nacin:
--     	* ispisati ’lak’, ako predmet nosi manje od 6 bodova
-- 	  	* ’srednje tezak’, ako nosi 6 ili 7 bodova
--		* 'tezak’ ako nosi bar 8 bodova
-- Izdvojiiti sve informacije o predmetima.
SELECT naziv, espb,
       	     CASE 
	     	  WHEN espb < 6 THEN 'lak'
		  WHEN espb IN (6, 7) THEN 'srednje tezak'
		  ELSE 'tezak'
	     END AS klasifikacija
FROM da.predmet p
LIMIT 30;

-- 11. Za  svakog  studenta  iz  tabele dosije izdvojiti  indeks,  ime,  prezime  studenta
--       praceno jednom od mogucih informacija o statusu studenta:
-- 	 	 * ’brucos’, ako nije polagao nijedan predmet
-- 		 * ’nijedan polozen’, ako nema polozen ispit
-- 		 * ’student’, inace
SELECT d.indeks, d.ime, d.prezime,
       	     CASE
		WHEN NOT EXISTS(SELECT * FROM da.ispit i WHERE i.indeks=d.indeks) THEN 'brucos'
		WHEN NOT EXISTS(SELECT * FROM da.ispit i WHERE i.indeks=d.indeks AND i.ocena>5 AND i.status='o') THEN 'nijedan polozen'
		ELSE 'student'
	    END AS "klasifikacija"
FROM da.dosije d
LIMIT 50;

-- 12. Da li uslovi u caseu moraju biti disjunktni?
SELECT indeks, ocena, CASE
					WHEN ocena>=8 THEN '>=8'
					WHEN ocena>=7 THEN '>=7'
					ELSE 'nesto trece'
				    END
FROM da.ispit i
WHERE ocena>5
LIMIT 30;
