

--1 
--select d.indeks, ime, prezime, 
--       count(distinct i.idpredmeta) br_polagao, 
--       sum(case when ocena>5 and status='o' then 1 else 0 end) br_polozio, 
--       dec(round(avg(case when ocena>5 and status='o' then ocena*1.0 
--                    else null end), 2), 4,2) prosek
--from da.dosije d join da.ispit i on d.indeks=i.indeks  
--   join da.predmet p on i.idpredmeta=p.id
--where lower(ime) like '%a%' or lower(ime) like '%o%'
--group by d.indeks, ime, prezime
--having sum(case when ocena>5 and status='o' then espb else 0 end ) between 15 and 25
--order by d.indeks;


--2
--select d1.indeks, d1.ime, d1.prezime,  d2.indeks, d2.ime, d2.prezime
--from da.dosije d1, da.dosije d2
--where d1.indeks<d2.indeks and 2 <= (select count(*)
--                                     from da.ispit i1 join da.ispit i2 
--                                     on i1.idpredmeta=i2.idpredmeta and
--                                          i1.skgodina=i2.skgodina and
--                                          i1.oznakaroka=i2.oznakaroka
--                                     where d1.indeks=i1.indeks 
--                                           and d2.indeks=i2.indeks
--                                           and i1.ocena>5 and i1.status='o'
--                                           and i2.ocena>5 and i1.status='o')
--      and d1.ime like 'M%' and d2.ime like 'M%';  

--3
--select count(*) br_studenata
--from (
--select indeks, sum(p.espb) pol_bodovi
--from  da.ispit i join da.predmet p on i.idpredmeta=p.id
--where ocena>5 and status='o'
--group by indeks) as t
--where pol_bodovi>10;

--ili 

--with student_bodovi as ( 
--select indeks, sum(p.espb) pol_bodovi
--from  da.ispit i join da.predmet p on i.idpredmeta=p.id
--where ocena>5 and status='o'
--group by indeks )
--select count(*) br_studenata
--from student_bodovi
--where pol_bodovi>10;

--ili 

--with student_bodovi as ( 
--select indeks
--from  da.ispit i join da.predmet p on i.idpredmeta=p.id
--where ocena>5 and status='o'
--group by indeks
--having sum(p.espb) >10 )
--select count(*) br_studenata
--from student_bodovi;

--4
--with student_ocene as (
--select indeks, ocena br8, null  br9
--from da.ispit
--where ocena=8
--union all
--select indeks,  null br8, ocena br9
--from da.ispit
--where ocena=9)
--select indeks, count(br8) broj_8, count(br9) broj_9
--from student_ocene
--group by indeks;
	
--ili

--with student_8 as (
--select indeks, count(*) br8
--from da.ispit
--where ocena=8
--group by indeks
--),
--student_9 as (
--select indeks, count(*) br9
--from da.ispit
--where ocena=9
--group by indeks
--)
--select coalesce(s1.indeks, s2.indeks), coalesce(br8,0) broj_8, coalesce(br9, 0) broj_9
--from  student_8 s1 full outer join student_9 s2 on s1.indeks=s2.indeks;

--ili

--select indeks, sum(case when ocena=8 then 1 else 0 end) broj_8, sum(case when ocena=9 then 1 else 0 end) broj_9
--from da.ispit
--group by indeks
--having sum(case when ocena=8 then 1 else 0 end)>0 or sum(case when ocena=9 then 1 else 0 end)>0;

--ili

--select indeks, sum(case when ocena=8 then 1 else 0 end) broj_8, sum(case when ocena=9 then 1 else 0 end) broj_9
--from da.ispit
--where ocena=8 or ocena=9
--group by indeks;

--5
--select ime, prezime, naziv
--from da.dosije d join da.ispit i
--		on d.indeks=i.indeks and ocena>5 and status='o'
--	join  da.predmet p
--		on i.idpredmeta = p.id
--where not exists (select * from da.ispit 
--                  where idpredmeta = i.idpredmeta 
--                        and d.indeks = indeks 
--                        and (skgodina<>i.skgodina or 
--                             oznakaroka<>i.oznakaroka));


--6
--select d.indeks, ime, prezime, coalesce(naziv, repeat('*', length(prezime)))
--from da.dosije d left join da.ispit i 
--		 on d.indeks=i.indeks and ocena>5 and status='o'
--     left join da.predmet p
--     	on p.id=i.idpredmeta		
--where current date - datupisa  <= all (select current date - datupisa
--                                          from da.dosije);
										  
--ili 

--select d.indeks, ime, prezime, coalesce(naziv, repeat('*', length(prezime)))
--from da.dosije d left join da.ispit i 
--		 on d.indeks=i.indeks and ocena>5 and status='o'
--     left join da.predmet p
--     	on p.id=i.idpredmeta		
--where current date - datupisa  =  (select min(current date - datupisa)
--                                          from da.dosije);


--7										  
--with student_bodovi (indeks, polozeni_bodovi) as (
--select indeks, sum(espb)
--from da.ispit i join da.predmet p on i.idpredmeta=p.id
--where ocena>5 and status='o'
--group by indeks )
--select d.indeks, ime, prezime, polozeni_bodovi
--from student_bodovi sb join da.dosije d on d.indeks=sb.indeks
--where polozeni_bodovi=(select max(polozeni_bodovi) from student_bodovi); 


--select d.indeks, ime, prezime, sum(espb)
--from da.ispit i join da.dosije d on i.indeks=d.indeks 
--             join da.predmet p on p.id=i.idpredmeta
--where ocena>5 and status='o'
--group by d.indeks, ime, prezime
--having sum(espb)>= all(select sum(espb)
--                         from da.ispit i join da.predmet p 
--                             on i.idpredmeta=p.id
--                         where ocena>5 and ocena>5
--                         group by indeks);


--8 

--with pom as
--(select indeks, oznakaroka, skgodina, 
--decimal(avg(case when ocena>5 and status='o' then 100.0 else 0 end),5,2) uspesnost
--from da.ispit
--group by indeks, oznakaroka, skgodina
--
--)
--select ime, prezime, naziv, uspesnost
--from pom p join da.dosije d
--		on d.indeks = p.indeks
--	join da.ispitnirok ir
--	on ir.skgodina = p.skgodina and ir.oznakaroka = p.oznakaroka
--where mestorodjenja='Arandjelovac'
--and not exists (select * from pom
--            	where indeks<>d.indeks 
--                 and skgodina = p.skgodina 
--				 and oznakaroka = p.oznakaroka 
--				 and uspesnost < p.uspesnost)
--  and uspesnost = (select min(uspesnost) 
--                   from pom
--                   where indeks = p.indeks) ;
					

--9 

--select d.ime, p.naziv, i.ocena,
--       case
--       		when ocena is null then 'NULL'
--       		when ocena=10 then repeat(substr(d.ime, length(d.ime)), 10)
--       		else repeat(substr(d.ime, 1, 1)||substr(p.naziv, 1, 1), ocena)
--       end as "dugi kod"
--from da.dosije d left join da.ispit i on d.indeks=i.indeks
--			  left join da.predmet p on i.idpredmeta=p.id
--where not exists(select *
--	        	       from da.ispit i1 join da.dosije d1 on i1.indeks=d1.indeks
--	                   where d1.ime=d.ime and ocena>i.ocena);	
	
