-- 1. Izdvojiti indeks, ime, prezime i datum diplomiranja za svakog studenta.
--     Ako je datum diplomiranja nepoznat,
--     umesto NULL vrednosti ispisati “Nepoznat”.
--SELECT indeks, ime, prezime, COALESCE(CHAR(datDiplomiranja), 'Nepoznat')
--FROM da.dosije
--ORDER BY 4 DESC;

-- 2.  Izdvojiti indeks, ime, prezime i mesto rodenja za svakog studenta.
--      Ako jemesto rodenja ’Kraljevo’, prikazati NULL.
--SELECT indeks, ime, prezime,
--       	      NULLIF(mestoRodjenja, 'Kraljevo') AS "Mesto Rodjenja"
--FROM da.dosije;

-- SQL - agregatne funkcije,  group by i having klauzule
-- 1. Izdvojiti  ukupan  broj  studenata,
--     leksikografski  gledano  najmanje  ime  i
--     najveci broj indeksa studenta iz tabele dosije.
--     KOMENTAR: rezultat je tabela 1x3, gde svaka od informacija agregira
--     		    na neki nacin informacije iz tablele dosije;
--SELECT COUNT(*) AS "Broj studenata",
--       	      MIN(ime) AS "Najmanje ime",
--	      MAX(indeks) AS "Najveci indeks"
--FROM da.dosije;

-- 2. Odrediti ukupan broj studenata,
--     broj studenata kojima je poznat datum diplomiranja i
--     broj razlicitih vrednosti za mesto rodenja.
--SELECT COUNT(*), COUNT(datDiplomiranja), COUNT(DISTINCT mestoRodjenja)
--FROM da.dosije;

-- 3. Za  studente  koji  su  nesto  polozili,
--     izdvojiti  broj  indeksa  i  ukupan  broj skupljenih bodova.
--SELECT indeks, SUM(espb) AS "Ukupno espb"
--FROM da.ispit i JOIN da.predmet p ON i.idPredmeta=p.id
--WHERE ocena>5 AND status='o'
--GROUP BY indeks
--ORDER BY 1;

-- 4. Za studenta koji je skupio bar 20 bodova prikazati
--     ukupan broj skupljenih bodova.
--     Rezultat urediti rastuce po ukupnom broju skupljenih bodova.
--SELECT indeks, SUM(espb) AS ukupno
--FROM da.ispit i JOIN da.predmet p ON i.idPredmeta=p.id
--WHERE ocena>5 AND status='o'
--GROUP BY indeks
--HAVING sum(espb)>=20
--ORDER BY 2;

-- 5.  Izracunati prosek studentima koji su polozili neki ispit.
--      Rezultat urediti opadajuce po proseku.
--SELECT indeks, AVG(ocena+0.0)
--FROM da.ispit
--WHERE ocena>5 AND status='o'
--GROUP BY indeks
--ORDER BY 2 DESC;

-- 6. Za svaki od ispitnih rokova i za svaki polagan predmet u tom roku
--     odrediti broj uspesnih polaganja.
--     Uzeti u obzir samo rokove i predmete takve da je u izdvojenom roku
--     bilo polozenih ispita iz izdvojenog predmeta.
--SELECT skGodina, oznakaRoka, idPredmeta, COUNT(*)
--FROM da.ispit
--WHERE ocena>5 AND status='o'
--GROUP BY skGodina, oznakaRoka, idPredmeta
--ORDER BY 1, 2, 3;

-- 7.  Izdvojiti brojeve indeksa studenata koji su polozili bar 3 ispita i
--      identifikatore predmeta koje su polozila bar tri studenta.
--	Sve to uradi u jednom upitu i
--      rezultat urediti u opadajucem poretku po broju polozenih ispita,
--      odnosno broju studenata.
--SELECT indeks, COUNT(idPredmeta)
--FROM da.ispit
--WHERE ocena>5 AND status='o'
--GROUP BY indeks
--HAVING COUNT(idPredmeta)>=3
--UNION
--SELECT idPredmeta, COUNT(indeks)
--FROM da.ispit i
--WHERE ocena>5 AND status='o'
--GROUP BY idPredmeta
--HAVING COUNT(indeks)>=3
--ORDER BY 2;

-- 8. Za  svaki  predmet  izdvojiti  broj  studenata  koji  su  ga  polagali.
--     Izdvojiti naziv predmeta i broj studenata.
--     Za predmete koje niko nije polagao izdvojiti 0.
--     Rezultat urediti prema broju studenata koji su polagali predmet u opadajucem poretku.
--SELECT naziv, COUNT(indeks) AS "Broj studenata"
--FROM da.ispit i RIGHT OUTER JOIN da.predmet p ON i.idPredmeta=p.id
--GROUP BY idPredmeta, naziv
--ORDER BY 2 DESC;

-- 9. Za studenta koji je polagao neki ispit
--     izracunati iz koliko ispita je dobio ocenu 8 i iz koliko ispita je dobio ocenu 9.
--     Izdvojiti indeks studenta,
--                   broj ispita  iz  kojih  je  student  dobio  ocenu  8  i
--                   broj  ispita  iz  kojih  je  student dobio ocenu 9.
--SELECT indeks,
--              SUM(CASE ocena
--		       WHEN 8 THEN 1
--		       ELSE 0
--		       END) AS "Broj osmica",
--	       SUM(CASE ocena
--			WHEN 9 THEN 1
--			ELSE 0
--			END) AS "Broj devetki"
--FROM da.ispit
--GROUP BY indeks
--ORDER BY 1;

-- 10.  Izdvojiti informacije o studentima koji su prvi diplomirali na fakultetu.
--        Uzeti u razmatranje samo one studente za koje se zna datum diplomiranja.
--SELECT *
--FROM da.dosije
--WHERE datDiplomiranja <= ALL(SELECT datDiplomiranja
--						      FROM da.dosije
--						      WHERE datDiplomiranja IS NOT NULL);

--SELECT *
--FROM da.dosije
--WHERE datDiplomiranja = (SELECT MIN(datDiplomiranja)
--					     FROM da.dosije);


