--1
create table student_ispiti (
  indeks integer not null primary key,
  broj_polozenih_ispita smallint,
  prosek double,
  constraint si_d foreign key (indeks) references da.dosije
);



--2
alter table student_ispiti
  add broj_prijavljenih_ispita smallint
  add constraint ispiti check(broj_prijavljenih_ispita>=broj_polozenih_ispita);

--3
insert into student_ispiti
select indeks, sum(case when ocena>5 and status='o' then 1 else 0 end) broj_polozenih, 
               avg(case when ocena>5 and status='o' then ocena*1.0 else null end),
               count(*) broj_prijavljenih 
from da.ispit
group by indeks;

--4		
drop table student_ispiti;

--5
--select d.indeks, d.ime, d.prezime, p.naziv
--from da.dosije d join da.STUDIJSKIPROGRAM sp
--		on d.idprograma=sp.id and sp.naziv='Informatika'
--	 join da.NIVOKVALIFIKACIJE nk 
--	 	on sp.idnivoa=nk.id and lower(nk.naziv) like 'osnovne%'
--	 join da.PREDMETPROGRAMA pp
--	 	on pp.idprograma=d.idprograma and vrsta='obavezan'
--	 join 	da.predmet p
--	 	on pp.idpredmeta=p.id
--
--where year(datupisa)=2015 and not exists (select *
--                                         from da.ispit i
--                                         where i.indeks= d.indeks and
--                                              i.idpredmeta=p.id and
--                                         ocena>5 and status='o');

--6
--create view ispitni_rok_2018 as 
--select skgodina, oznakaroka, naziv, 
--        datpocetka, datkraja 
--from da.ispitnirok 
--where skgodina >= 2018;
--


--select * from ispitni_rok_2018 ;
--

--select * from da.ISPITNIROK ;


--insert into ispitni_rok_2018 
--values(2020, 'dec', 'Decembar 2020', 
--   current date - 1 year, current_date - 1 year + 20 days) ;

--insert into ispitni_rok_2018 
--values(2015, 'dec', 'Decembar 2015', 
--   current date - 5 years, current_date - 5 years + 20 days) ;

--update ispitni_rok_2018 
--set naziv = 'Jan 2015'
--where skgodina = 2015 oznakaroka = 'jan1' ;
--napomena: nece biti promene jer se rok ne nalazi u redovima dobijenim izvrsavanjem pogleda 


--update ispitni_rok_2018 
--set naziv = 'Dec 2020'
--where skgodina = 2020 and trim(oznakaroka) = 'dec' ;

--select * from da.ISPITNIROK ;

--delete from ispitni_rok_2018
--where naziv= 'Decembar 2015';
--napomena: nece biti promene jer se rok ne nalazi u redovima dobijenim izvrsavanjem pogleda 


--delete from ispitni_rok_2018
--where naziv= 'Dec 2020';

--
--drop view ispitni_rok_2018;

--7
--create view mp_ispiti as 
--select i.* from da.ispit i join da.dosije d 
--    on i.indeks = d.indeks 
--where d.ime = 'Marko' and d.prezime = 'Petrovic' ;
--

--update mp_ispiti
--set datpolaganja=null;
--napomena: javlja se greska jer je u from klauzuli u definiciji pogleda izvrseno spajanje tabela

-- druga verzija pogleda

--create view mp_ispiti1 as 
--select * from da.ispit i
-- where exists (select * 
--               from da.dosije d 
--               where i.indeks = d.indeks and d.ime = 'Marko' 
--                     and d.prezime = 'Petrovic');

--update mp_ispiti1
--set datpolaganja=null;
--prolazi       

--select *
--from mp_ispiti1;

--8

--create view polaganja_m2 as
--select * from da.ispit i
--where exists (select * from da.dosije
--where indeks = i.indeks
--and ime in ('Marko','Marija'))
--and exists (select * from da.ispit
--where indeks = i.indeks and ocena > 5 and status = 'o'
--and oznakaroka = 'jan1' and skgodina = 2018 )
--with check option;

--unos ispita za studenta Marka koji zadovoljava neophodne uslove

--insert into polaganja_m2(indeks, idpredmeta, 
--skgodina, oznakaroka, status, poeni, ocena)
--values (20150013,2027,2018, 'sep2', 'o', 40, 5);


--student Jovana (ne zadovoljava uslove pogleda)
--select *
--from da.dosije
--where indeks = 20150001;

--unos njenog ispita koriscenjem pogleda ne prolazi 
--insert into polaganja_m2(indeks, idpredmeta, 
--skgodina, oznakaroka, status)
--values (20150001,1877,2016, 'jun1', 'n');

--ali prolazi sa tabelom ispit
--insert into da.ispit(indeks, idpredmeta, 
--skgodina, oznakaroka, status)
--values (20150001,1877,2016, 'jun1', 'n');


-- azuriranje unetog ispita koriscenjem pogleda prolazi za Marka sa indeksom 13/20015
--update polaganja_m2
--set datpolaganja = '10/25/2018'
--where indeks = 20150013 and 
--      idpredmeta = 2027 and 
--      skgodina= 2018 and oznakaroka = 'sep2';

-- azuriranje unetog ispita koriscenjem pogleda 
-- ne prolazi za Jovanu jer ne zadovoljava uslove iz pogleda 

--update polaganja_m2
--set datpolaganja = '6/25/2016'
--where indeks = 20150001 and 
--      idpredmeta = 1877 and 
--      skgodina= 2016 and oznakaroka = 'jun1';

-- ali prolazi koriscenjem tabele 

--update da.ispit
--set datpolaganja = '6/25/2016'
--where indeks = 20150001 and 
--      idpredmeta = 1877 and 
--      skgodina= 2016 and oznakaroka = 'jun1';


--brisanje ispita koriscenjem pogleda prolazi za Marka
--delete from polaganja_m2 
--where indeks = 20150013 and 
--      idpredmeta = 2027 and 
--      skgodina= 2018 and oznakaroka = 'sep2';


--brisanje ispita koriscenjem pogleda ne prolazi za Jovanu
-- jer ne zadovoljava uslove iz pogleda 

--delete from polaganja_m2 
--where indeks = 20150001 and 
--      idpredmeta = 1877 and 
--      skgodina= 2016 and oznakaroka = 'jun1';


--9
--create index dosije_ime_prezime on da.dosije 
--(ime desc, prezime desc); 

--drop index dosije_ime_prezime;


--10

select ir.naziv
from da.ispitnirok ir
where not exists(select *
			from da.ispit i1 join da.dosije d1 on i1.indeks=d1.indeks
			 where i1.skgodina=ir.skgodina 
			      and i1.oznakaroka=ir.oznakaroka 
			      and month(d1.datupisa) in (11,12)
				 and not exists(select *
				 		  from da.ispit i2 join da.dosije d2 on i2.indeks=d2.indeks
				 		  where i2.skgodina=ir.skgodina 
				 		        and i2.oznakaroka=ir.oznakaroka 
				 		        and i2.idpredmeta=i1.idpredmeta 
				 		        and i2.ocena>5  and status='o'
				 		        and month(d2.datupisa) in (9,10)))
                                
                                
    -- ako zelimo da osiguramo da postoji bar jedan predmet koji zadovoljava trazene uslove u tekstu
    -- dodajemo i naredni uslov     
	and  exists(select *
			from da.ispit i1 join da.dosije d1 on i1.indeks=d1.indeks
			 where i1.skgodina=ir.skgodina 
			      and i1.oznakaroka=ir.oznakaroka 
			      and month(d1.datupisa) in (11,12))
		;
	
