################################################
############### SQL UPITI ######################
################################################
1. SLEKTUJ IME, RPEZIME, GODINU, MESEC I DAN RODJENJA
KOD STUDENATA STARIJIH OD 2001 GENERACIJE
------------------------------------------------
SELECT IME, PREZIME,
EXTRACT(YEAR FROM DATUMRODJENJA) AS GODINA,
EXTRACT(MONTH FROM DATUMRODJENJA) AS MESEC ,
EXTRACT(DAY FROM DATUMRODJENJA) AS DAN
FROM STUDENT
WHERE EXTRACT(YEAR FROM DATUMRODJENJA) < 2001
################################################
2. SELEKTUJ IME, PREZIME, INICIJALE I POLOZAJ PRVOG POJAVLJIVANJA SLOVA A
KOD STUDENATA CIJE JE PREZIME DUZE OD 9 SLOVA I ZAVRSAVA SE NA IC
------------------------------------------------
SELECT IME, PREZIME,
CONCAT(SUBSTR(IME,1,1),'.',SUBSTR(PREZIME,1,1),'.'),
INSTR(LOWER(PREZIME),'a')
FROM STUDENT
WHERE LENGTH(PREZIME) > 9 AND LOWER(PREZIME) LIKE '%i%c'
################################################
3.Prikazati indeks ime i prezime svih sutdenata koji
imaju mentora koji se zove Ivan.
------------------------------------------------
SELECT BROJINDEKSA, IME, PREZIME, MENTOR
FROM STUDENT
WHERE MENTOR IN (SELECT SIFRANASTAVNIKA
FROM NASTAVNIK
WHERE IME LIKE 'Ivan')
################################################
4. Prikazati sifru predmdeta, naziv i broj ESPB poena
za sve predmete ciji je broj ESPB manji do 5 I nemaju
nijedan predmet kao uslov
------------------------------------------------
SELECT SIFRAPREDMETA,NAZIV, ESPB
FROM PREDMET
WHERE ESPB < 5 AND USLOV IS NULL
################################################
5.
------------------------------------------------
SELECT BROJINDEKSA, IME, PREZIME, SIFRAMODULA
FROM STUDENT
WHERE SKOLARINA > 150000 AND SIFRAMODULA NOT IN (9,11,12,14)
AND IME NOT LIKE 'Jovan'
################################################
6.
------------------------------------------------
SELECT *
FROM POLAGANJE
WHERE GODINA = 2022 AND REDNIBROJ = 9
AND (OCENA BETWEEN 8 AND 10)
ORDER BY OCENA ASC
################################################
7.
------------------------------------------------
SELECT IME, PREZIME
FROM STUDENT
WHERE SIFRAMODULA = (SELECT SIFRAPROFILA
FROM MODUL
WHERE KVOTA = 180)
################################################
8.
------------------------------------------------
SELECT MESEC, DATUMPOCETKA, DATUMZAVRSETKA, (DATUMZAVRSETKA - DATUMPOCETKA) AS BROJ_DANA,
NEXT_DAY(DATUMPOCETKA,'wednesday') AS PRVA_SREDAM,
ROUND(MONTHS_BETWEEN(SYSDATE, DATUMZAVRSETKA),2) AS BROJ_MESECI
FROM ISPITNIROK
WHERE GODINA = 2023
################################################
9.
------------------------------------------------
SELECT *
FROM POLAGANJE
WHERE OCENA = 5 AND DATUMPOLAGANJA + INTERVAL '1-9' YEAR TO MONTH > SYSDATE
################################################
10.
------------------------------------------------
SELECT GODINA, MESEC,
CASE
WHEN EXTRACT(MONTH FROM DATUMPOCETKA) = 1 THEN 'Januarski'
WHEN EXTRACT(MONTH FROM DATUMPOCETKA) = 2 THEN 'Februarski'
WHEN EXTRACT(MONTH FROM DATUMPOCETKA) = 3 THEN 'Martovski'
WHEN EXTRACT(MONTH FROM DATUMPOCETKA) = 4 THEN 'Aprilski'
WHEN EXTRACT(MONTH FROM DATUMPOCETKA) = 5 THEN 'Majski'
WHEN EXTRACT(MONTH FROM DATUMPOCETKA) = 6 THEN 'Junski'
WHEN EXTRACT(MONTH FROM DATUMPOCETKA) = 7 THEN 'Julski'
WHEN EXTRACT(MONTH FROM DATUMPOCETKA) = 8 THEN 'Avgustovski'
WHEN EXTRACT(MONTH FROM DATUMPOCETKA) = 9 THEN 'Septembarski'
WHEN EXTRACT(MONTH FROM DATUMPOCETKA) = 10 THEN 'Oktobarski'
WHEN EXTRACT(MONTH FROM DATUMPOCETKA) = 11 THEN 'Novembarski'
WHEN EXTRACT(MONTH FROM DATUMPOCETKA) = 12 THEN 'Decembarski'
ELSE 'Neodređen'
END AS NAZIV
FROM ISPITNIROK
WHERE TIP LIKE 'apsol%' AND GODINA IN (2023, 2024)
################################################
11.
------------------------------------------------
SELECT IME, PREZIME, LENGTH(IME) AS D_IME, LENGTH(PREZIME) AS D_PREZIME,
NULLIF(LENGTH(IME),LENGTH(PREZIME)) AS REZULTAT
FROM NASTAVNIK
WHERE TITULA IS NULL AND LENGTH(IME) < 6
################################################
12.
------------------------------------------------
SELECT OCENA, COALESCE(DATUMUPISA, DATUMPOLAGANJA) AS REZULTAT
FROM POLAGANJE
WHERE SIFRAPREDMETA = 24
################################################
13.
------------------------------------------------
SELECT BROJINDEKSA, IME, PREZIME, TO_CHAR(DATUMRODJENJA,'DD.MM.YYYY.') AS DATUM_RODEJNJA
FROM STUDENT
WHERE INSTR(TO_CHAR(BROJINDEKSA),'12')
################################################
14.
------------------------------------------------
SELECT DATUMOD, DATUMDO, PLATA,
ROUND(MONTHS_BETWEEN(COALESCE(DATUMDO, ADD_MONTHS(SYSDATE,-3) ), DATUMOD)) AS BROJ_MESECI,
CASE TRUNC(MONTHS_BETWEEN(COALESCE(DATUMDO, ADD_MONTHS(SYSDATE,-3) ), DATUMOD)/12)
WHEN 0 THEN 'nema bonusa'
WHEN 1 THEN TO_CHAR(ROUND(PLATA*0.1))
WHEN 2 THEN TO_CHAR(ROUND(PLATA*0.2))
WHEN 3 THEN TO_CHAR(ROUND(PLATA*0.3))
ELSE TO_CHAR(ROUND(PLATA*0.4))
END AS BONUS,
CASE TRUNC(MONTHS_BETWEEN(COALESCE(DATUMDO, ADD_MONTHS(SYSDATE,-3) ), DATUMOD)/12)
WHEN 0 THEN '0'
WHEN 1 THEN '10%'
WHEN 2 THEN '20%'
WHEN 3 THEN '30%'
ELSE '40%'
END AS PROCENAT_BONUSA
FROM ANGAZOVANJE
WHERE PLATA >= 15000 AND PLATA <= 90000 AND DATUMOD + INTERVAL '5-8' YEAR TO MONTH > ADD_MONTHS(SYSDATE,-3)
ORDER BY PROCENAT_BONUSA DESC, BONUS ASC
################################################
15. Prikazati sifru i naziv svih modula koji se nalaze na programu ISIT,
a ciji naziv pocinje na slovo I.
------------------------------------------------
I NACIN:
SELECT PR.SIFRAPROFILA, PR.NAZIVPROFILA
FROM MODUL M
INNER JOIN PROFIL P ON P.SIFRAPROFILA = M.SIFRAPROGRAMA
INNER JOIN PROFIL PR ON PR.SIFRAPROFILA = M.SIFRAPROFILA
WHERE P.NAZIVPROFILA LIKE 'ISIT' AND PR.NAZIVPROFILA LIKE 'I%'
------------------------------------------------
II NACIN
SELECT SIFRAPROFILA, NAZIVPROFILA
FROM PROFIL
WHERE LOWER(NAZIVPROFILA) LIKE 'i%'
AND SIFRAPROFILA IN (SELECT SIFRAPROFILA
FROM MODUL
WHERE SIFRAPROGRAMA = (SELECT SIFRAPROFILA
FROM PROFIL
WHERE NAZIVPROFILA = 'ISIT'))
################################################
16.
------------------------------------------------
I NACIN
SELECT S.BROJINDEKSA, S.IME, S.PREZIME, P.DATUMPOLAGANJA
FROM STUDENT S
INNER JOIN POLAGANJE P ON S.BROJINDEKSA = P.BROJINDEKSA
WHERE MOD(S.SKOLARINA,6) = 0
------------------------------------------------
I NACIN
SELECT BROJINDEKSA, S.IME, S.PREZIME, P.DATUMPOLAGANJA
FROM STUDENT S
INNER JOIN POLAGANJE P USING (BROJINDEKSA)
WHERE MOD(S.SKOLARINA,6) = 0
################################################
17.
------------------------------------------------
SELECT N.IME, N.PREZIME, P.NAZIV, A.PLATA, N.TITULA
FROM NASTAVNIK N INNER JOIN ANGAZOVANJE A ON A.SIFRANASTAVNIKA = N.SIFRANASTAVNIKA
INNER JOIN PREDMET P ON A.SIFRAPREDMETA = P.SIFRAPREDMETA
WHERE N.TITULA LIKE 'doktor' AND P.NAZIV LIKE 'O%'
################################################
18.
------------------------------------------------
SELECT PO.*,I.MESEC
FROM POLAGANJE PO
INNER JOIN PREDMET PR ON PO.SIFRAPREDMETA = PR.SIFRAPREDMETA
INNER JOIN ISPITNIROK I ON PO.REDNIBROJ = I.REDNIBROJ AND PO.GODINA = I.GODINA
WHERE PR.NAZIV LIKE 'Osnove inf%' AND I.TIP LIKE 'apsolventski'
################################################
18.
------------------------------------------------
I NACIN
SELECT S.IME, EXTRACT(YEAR FROM S.DATUMRODJENJA) AS GODINA_RODJENJA,
CONCAT(N.IME,' ', N.PREZIME) AS MENTOR
FROM STUDENT S
LEFT JOIN NASTAVNIK N ON S.MENTOR = N.SIFRANASTAVNIKA
WHERE TRUNC(MONTHS_BETWEEN(SYSDATE,S.DATUMRODJENJA)/12)>=22
------------------------------------------------
II NACIN
SELECT S.IME, EXTRACT(YEAR FROM S.DATUMRODJENJA) AS GODINA_RODJENJA,
CONCAT(N.IME,' ', N.PREZIME) AS MENTOR
FROM STUDENT S
LEFT JOIN NASTAVNIK N ON S.MENTOR = N.SIFRANASTAVNIKA
WHERE S.DATUMRODJENJA + INTERVAL '22' YEAR < SYSDATE
################################################
19.
------------------------------------------------
SELECT S.IME, EXTRACT(YEAR FROM S.DATUMRODJENJA) AS GODINA_RODJENJA,
CONCAT(N.IME,' ', N.PREZIME) AS MENTOR
FROM STUDENT S
LEFT JOIN NASTAVNIK N ON S.MENTOR = N.SIFRANASTAVNIKA
WHERE LENGTH(N.PREZIME) = 12 OR N.PREZIME IS NULL
################################################
20.
------------------------------------------------
SELECT S.IME, EXTRACT(YEAR FROM S.DATUMRODJENJA) AS GODINA_RODJENJA,
CONCAT(N.IME,' ', N.PREZIME) AS MENTOR
FROM STUDENT S
RIGHT JOIN NASTAVNIK N ON S.MENTOR = N.SIFRANASTAVNIKA
WHERE LENGTH(N.IME) > 7
################################################
21.
------------------------------------------------
SELECT S.IME, EXTRACT(YEAR FROM S.DATUMRODJENJA) AS GODINA_RODJENJA,
CONCAT(N.IME,' ', N.PREZIME) AS MENTOR
FROM STUDENT S
FULL JOIN NASTAVNIK N ON S.MENTOR = N.SIFRANASTAVNIKA
WHERE LENGTH(S.IME) * 3 < LENGTH(S.PREZIME) OR S.IME IS NULL
################################################
22.
------------------------------------------------
I NACIN:
SELECT PR.ESPB ||'-'|| SUBSTR(PR.NAZIV,1,3) AS INICIJALI, P.NAZIV
FROM PREDMET PR
LEFT JOIN PREDMET P ON PR.USLOV = P.SIFRAPREDMETA
INNER JOIN POLAGANJE PO ON PR.SIFRAPREDMETA = PO.SIFRAPREDMETA
WHERE PR.ESPB < 6
HAVING LENGTH(COUNT(PO.SIFRAPREDMETA)) >= 1
GROUP BY PR.ESPB, SUBSTR(PR.NAZIV,1,3), P.NAZIV
------------------------------------------------
II NACIN:
SELECT PR.ESPB ||'-'|| SUBSTR(PR.NAZIV,1,3) AS INICIJALI, P.NAZIV
FROM PREDMET PR
LEFT JOIN PREDMET P ON PR.USLOV = P.SIFRAPREDMETA
WHERE PR.ESPB < 6 AND PR.SIFRAPREDMETA IN ( SELECT SIFRAPREDMETA
FROM POLAGANJE PO)
################################################
23.
------------------------------------------------
SELECT N.IME ||' '|| N.PREZIME AS NASTAVNIK, P.NAZIV AS PREDMET
FROM NASTAVNIK N
INNER JOIN ANGAZOVANJE A ON N.SIFRANASTAVNIKA = A.SIFRANASTAVNIKA
INNER JOIN PREDMET P ON P.SIFRAPREDMETA = A.SIFRAPREDMETA
WHERE P.ESPB > 3 AND TITULA LIKE 'doktor'
################################################
24.
------------------------------------------------
SELECT N.IME, N.PREZIME, P.NAZIV
FROM NASTAVNIK N CROSS JOIN PREDMET P
WHERE N.TITULA = 'doktor' AND P.ESPB > 3;
################################################
25.
------------------------------------------------
SELECT N.SIFRANASTAVNIKA, N.PREZIME, A.SIFRAPREDMETA, A.PLATA
FROM NASTAVNIK N INNER JOIN ANGAZOVANJE A ON N.SIFRANASTAVNIKA = A.SIFRANASTAVNIKA
WHERE A.PLATA > ANY(
SELECT A.PLATA
FROM ANGAZOVANJE A
INNER JOIN PREDMET P ON A.SIFRAPREDMETA = P.SIFRAPREDMETA
WHERE P.NAZIV LIKE 'Osnove kvaliteta'
)
################################################
26.
------------------------------------------------
I NACIN:
SELECT S.BROJINDEKSA, S.PREZIME, S.SKOLARINA
FROM STUDENT S
WHERE S.SKOLARINA > ALL (
SELECT ST.SKOLARINA
FROM STUDENT ST
WHERE ST.SKOLARINA IS NOT NULL AND
ST.MENTOR = (SELECT M.SIFRANASTAVNIKA
FROM NASTAVNIK M
WHERE LOWER(M.IME) LIKE 'anita'));
------------------------------------------------
II NACIN:
SELECT S.BROJINDEKSA, S.PREZIME
FROM STUDENT S
WHERE S.SKOLARINA > ALL (
SELECT ST.SKOLARINA
FROM STUDENT ST
INNER JOIN NASTAVNIK M ON ST.MENTOR = M.SIFRANASTAVNIKA
WHERE M.IME LIKE 'Anita' AND ST.SKOLARINA IS NOT NULL);
################################################
27.
------------------------------------------------
SELECT S.*, P.NAZIVPROFILA
FROM STUDENT S
INNER JOIN PROFIL P ON P.SIFRAPROFILA = S.SIFRAMODULA
INNER JOIN POLAGANJE PO ON S.BROJINDEKSA = PO.BROJINDEKSA
WHERE (UPPER(P.NAZIVPROFILA) LIKE '%MEN%' OR P.SIFRAPROFILA NOT IN (SELECT SIFRAPROFILA FROM PROFIL))
AND TO_NUMBER(SUBSTR(S.BROJINDEKSA,1,4)) < EXTRACT(YEAR FROM SYSDATE) - 2
AND ADD_MONTHS(SYSDATE, -24) < PO.DATUMPOLAGANJA;
################################################
28.
------------------------------------------------
SELECT MIN(S.SKOLARINA) AS MIN_SKOALRINA,
MAX(S.SKOLARINA) AS MAX_SKOALRINA
FROM STUDENT S
WHERE S.SIFRAMODULA = 11;
################################################
29.
------------------------------------------------
SELECT COUNT(*) AS BROJ_STUDENATA,
MIN(S.SKOLARINA) AS MIN_SKOLARINA,
ROUND(AVG(S.SKOLARINA),2) AS PROSECNA_SKOLARINA
FROM STUDENT S
WHERE S.MENTOR IS NOT NULL
################################################
30.
------------------------------------------------
SELECT SIFRAMODULA, MIN(SKOLARINA),MAX(SKOLARINA), COUNT(*)
FROM STUDENT
WHERE SIFRAMODULA IS NOT NULL
GROUP BY SIFRAMODULA;
################################################
31.
------------------------------------------------
SELECT IME, SKOLARINA
FROM STUDENT
WHERE SKOLARINA < (SELECT MAX(SKOLARINA)
FROM STUDENT
WHERE SIFRAMODULA = 10);
################################################
32.
------------------------------------------------
SELECT S.SIFRAMODULA, S.MENTOR,COUNT(*)
FROM STUDENT S
INNER JOIN PROFIL P ON S.SIFRAMODULA = P.SIFRAPROFILA
WHERE S.MENTOR IS NOT NULL AND S.SKOLARINA IS NOT NULL
AND LENGTH(P.NAZIVPROFILA) < 22
GROUP BY S.SIFRAMODULA, S.MENTOR
################################################
33.
------------------------------------------------
SELECT S.SIFRAMODULA, S.MENTOR, SUM(S.SKOLARINA)
FROM STUDENT S
GROUP BY S.SIFRAMODULA, S.MENTOR
HAVING MAX(S.SKOLARINA)<100000;
################################################
34.
------------------------------------------------
SELECT S.SIFRAMODULA,
EXTRACT(YEAR FROM S.DATUMRODJENJA) AS GODINA_RODJENJA,
COUNT(*) AS BROJ_STUDENATA
FROM STUDENT S
WHERE S.SKOLARINA IS NULL
GROUP BY S.SIFRAMODULA, EXTRACT(YEAR FROM S.DATUMRODJENJA)
HAVING COUNT(*) >= 2;
################################################
35.
------------------------------------------------
SELECT SIFRAMODULA, MIN(SKOLARINA)
FROM STUDENT
WHERE MENTOR IS NOT NULL
GROUP BY SIFRAMODULA
HAVING MIN(SKOLARINA) > (SELECT MIN(SKOLARINA)
FROM STUDENT
WHERE SIFRAMODULA = 13);
################################################
36.
------------------------------------------------
I NACIN:
SELECT S.PREZIME, S.IME, S.SIFRAMODULA
FROM STUDENT S
WHERE S.SKOLARINA = (SELECT MIN(S1.SKOLARINA)
FROM STUDENT S1
WHERE S1.SIFRAMODULA = S.SIFRAMODULA)
------------------------------------------------
II NACIN:
SELECT PREZIME, IME, SIFRAMODULA
FROM STUDENT
WHERE (SIFRAMODULA, SKOLARINA) IN (SELECT SIFRAMODULA, MIN(SKOLARINA)
FROM STUDENT
GROUP BY SIFRAMODULA);
################################################
37.
------------------------------------------------
SELECT CONCAT(SUBSTR(S.IME,1,1),'.',SUBSTR(S.PREZIME,1,1),'.') AS INICIJALI,
ROUND(AVG(PO.POENI),2)
FROM STUDENT S INNER JOIN POLAGANJE PO ON S.BROJINDEKSA = PO.BROJINDEKSA
WHERE S.BROJINDEKSA IN (
SELECT POL.BROJINDEKSA
FROM POLAGANJE POL INNER JOIN PREDMET PRE ON POL.SIFRAPREDMETA = PRE.SIFRAPREDMETA
WHERE PRE.NAZIV LIKE 'Baze%')
GROUP BY CONCAT(SUBSTR(S.IME,1,1),'.',SUBSTR(S.PREZIME,1,1),'.');
################################################
38.
------------------------------------------------
I NACIN:
SELECT SUBSTR(PO.BROJINDEKSA,1,4), COUNT(DISTINCT PO.SIFRAPREDMETA), COUNT(PO.BROJINDEKSA), ROUND(AVG(PO.POENI),2)
FROM POLAGANJE PO INNER JOIN ISPITNIROK I ON (I.REDNIBROJ, I.GODINA) = (PO.REDNIBROJ,PO.GODINA)
WHERE I.MESEC = 2 AND PO.POENI > 30
GROUP BY SUBSTR(PO.BROJINDEKSA,1,4)
ORDER BY AVG(PO.POENI);
------------------------------------------------
II NACIN:
SELECT SUBSTR(PO.BROJINDEKSA,1,4), COUNT(DISTINCT PO.SIFRAPREDMETA), COUNT(PO.BROJINDEKSA), ROUND(AVG(PO.POENI),2)
FROM POLAGANJE PO
WHERE LOWER(EXTRACT(MONTH FROM DATUMPOLAGANJA)) = 2
AND PO.POENI > 30
GROUP BY SUBSTR(PO.BROJINDEKSA,1,4)
ORDER BY AVG(PO.POENI) ASC;
################################################
39.
------------------------------------------------
SELECT S.SIFRAMODULA, COUNT(*) AS BROJ_STUDENATA,
SUM(CASE WHEN S.SKOLARINA > 100000 THEN 1 ELSE 0 END ) AS SK_PREKO_100K,
CASE
WHEN(SUM(CASE WHEN S.SKOLARINA > 100000 THEN 1 ELSE 0 END )>
SUM(CASE WHEN S.SKOLARINA IS NULL THEN 1 ELSE 0 END))
THEN 'Vise samofinansirajucih'
WHEN(SUM(CASE WHEN S.SKOLARINA > 100000 THEN 1 ELSE 0 END )<
SUM(CASE WHEN S.SKOLARINA IS NULL THEN 1 ELSE 0 END))
THEN 'Vise na budzetu'
ELSE 'Podjedanko'
END AS ODNOS
FROM STUDENT S
GROUP BY S.SIFRAMODULA
HAVING MAX(S.SKOLARINA) > (SELECT MIN(SKOLARINA) FROM STUDENT WHERE SIFRAMODULA = 9)
ORDER BY 3 DESC;
UMESTO NAZIVA KOLONE U ORDER BY MOZE SE PISATI REDNI BROJ KOLONE
################################################
40.
------------------------------------------------
CREATE OR REPLACE VIEW ANGAZOVANJA_PROFESORA AS
SELECT N.SIFRANASTAVNIKA, ROUND(AVG(A.PLATA),2) AS PROSECNA_PLATA,
ROUND((CASE
WHEN SUM(CASE WHEN DATUMDO IS NULL THEN 1 ELSE 0 END) > 0
THEN SYSDATE
ELSE MAX(A.DATUMDO) END) - MIN(A.DATUMOD),2) AS STAZ
FROM NASTAVNIK N JOIN ANGAZOVANJE A ON N.SIFRANASTAVNIKA = A.SIFRANASTAVNIKA
WHERE N.TITULA LIKE 'doktor'
GROUP BY N.SIFRANASTAVNIKA
ORDER BY N.SIFRANASTAVNIKA;
################################################
41.
------------------------------------------------
I NACIN:
CREATE OR REPLACE VIEW STATISTIKA_STUDENATA AS
SELECT S.BROJINDEKSA, P.GODINA, COUNT(*) AS BROJ_POLAGANJA,
ROUND(AVG(P.POENI),2) AS PROSECNO_POENA,
CASE WHEN
SUM(CASE WHEN P.OCENA > 5 THEN 1 ELSE 0 END) >
SUM(CASE WHEN P.OCENA <= 5 THEN 1 ELSE 0 END)
THEN 'ISPUNJEN USLOV'
ELSE 'NIJE ISPUNJEN USLOV'
END AS USLOV
FROM STUDENT S JOIN POLAGANJE P ON S.BROJINDEKSA = P.BROJINDEKSA
GROUP BY P.GODINA, S.BROJINDEKSA
HAVING COUNT(*)>2
II NACIN:
SELECT S.BROJINDEKSA, P.GODINA, COUNT(*) AS BROJ_POLAGANJA,
ROUND(AVG(P.POENI),2) AS PROSECNO_POENA,
CASE WHEN
SIGN(SUM(CASE WHEN P.POENI > 50 THEN 1 ELSE -1 END)) = 1
THEN 'ISPUNJEN USLOV'
ELSE 'NIJE ISPUNJEN USLOV'
END AS USLOV
FROM STUDENT S JOIN POLAGANJE P ON S.BROJINDEKSA = P.BROJINDEKSA
GROUP BY P.GODINA, S.BROJINDEKSA
HAVING COUNT(*) > 2;
################################################
42.
------------------------------------------------
I NACIN:
CREATE OR REPLACE VIEW STATISTIKA_PREDMETA AS
SELECT P.SIFRAPREDMETA, MAX(PO.POENI)-MIN(PO.POENI) AS RAZLIKA,
CASE SIGN(SUM(CASE WHEN PO.OCENA > 7 THEN 1 ELSE -1 END))
WHEN 1 THEN 'LAK'
WHEN -1 THEN 'TEZAK'
ELSE 'SREDNJE'
END AS TEZINA_ISPITA
FROM PREDMET P JOIN POLAGANJE PO ON P.SIFRAPREDMETA = PO.SIFRAPREDMETA
WHERE PO.POENI > 50
GROUP BY P.SIFRAPREDMETA, PO.REDNIBROJ
HAVING COUNT(*)>6
------------------------------------------------
II NACIN:
CREATE OR REPLACE VIEW STATISTIKA_PREDMETA AS
SELECT P.SIFRAPREDMETA, MAX(PO.POENI)-MIN(PO.POENI) AS RAZLIKA,
CASE WHEN
SUM(CASE WHEN PO.OCENA > 7 THEN 1 ELSE 0 END) >
SUM(CASE WHEN PO.OCENA > 5 AND PO.OCENA < 8 THEN 1 ELSE 0 END)
THEN 'LAK'
WHEN
SUM(CASE WHEN PO.OCENA > 7 THEN 1 ELSE 0 END) <
SUM(CASE WHEN PO.OCENA > 5 AND PO.OCENA < 8 THEN 1 ELSE 0 END)
THEN 'TEZAK'
ELSE 'SREDNJE'
END AS TEZINA_ISPITA
FROM PREDMET P JOIN POLAGANJE PO ON P.SIFRAPREDMETA = PO.SIFRAPREDMETA
WHERE PO.POENI > 50
GROUP BY P.SIFRAPREDMETA, PO.REDNIBROJ
HAVING COUNT(*)>6
################################################
43. FIBONACIJEV NIZ REKURZIJA
------------------------------------------------
WITH FIB (RB, PREDHODNI, TRENUTNI) AS
(
SELECT 1, 0, 1
FROM DUAL
UNION ALL
SELECT RB+1, TRENUTNI, PREDHODNI+TRENUTNI
FROM FIB
WHERE RB < 20
)
SELECT * FROM FIB;
################################################
44. Rekurzija uslovni predmet
------------------------------------------------
WITH USLOVNI_PREDMETI (SIFRAUSLOVA) AS
(
SELECT USLOV
FROM PREDMET
WHERE NAZIV LIKE 'Vestacka%'
UNION ALL
SELECT USLOV
FROM PREDMET JOIN USLOVNI_PREDMETI ON (SIFRAUSLOVA = SIFRAPREDMETA)
WHERE USLOV IS NOT NULL
)
SELECT * FROM USLOVNI_PREDMETI;
################################################
45. Prikazati broj polaganja prema godinama i rokovima, ali
i zbirno prema godinama za sva polaganja koja su realizovana
nakon 2021. godine.
ROLLUP
------------------------------------------------
SELECT IR.GODINA, IR.REDNIBROJ, GROUPING(IR.GODINA), GROUPING(IR.REDNIBROJ), COUNT(*) AS BROJ
FROM POLAGANJE IR
WHERE IR.GODINA > 2021
GROUP BY ROLLUP(IR.GODINA, IR.REDNIBROJ)
ORDER BY IR.GODINA
################################################
46. Prikazati broj polaganja prema godini i predmetu,
za ona polaganja koja su se desila posle 2021. godine,
zbirno po godinama, predmetima i godinama i predmetima.
U rezultat ukljuciti samo predmete sa parnim siframa
CUBE
------------------------------------------------
SELECT GODINA, SIFRAPREDMETA, GROUPING(GODINA), GROUPING(SIFRAPREDMETA), COUNT(*) AS BROJ
FROM POLAGANJE
WHERE GODINA > 2021 AND MOD(SIFRAPREDMETA,2) = 0
GROUP BY CUBE(GODINA, SIFRAPREDMETA);
################################################
47. NAJJEBENIJI DO SAD
------------------------------------------------
SELECT S.SIFRAMODULA, COUNT(*) AS BROJ_POLAGANJA,
ROUND(
SUM(CASE WHEN PO.POENI > 50 THEN 1 ELSE 0 END)/COUNT(*)
,2)
AS UDEO_USPESNIH_POLAGANJA,
ROUND(MONTHS_BETWEEN(SYSDATE, MIN(PO.DATUMPOLAGANJA)),2) AS BROJ_MESECI
FROM POLAGANJE PO JOIN STUDENT S ON S.BROJINDEKSA = PO.BROJINDEKSA
WHERE PO.DATUMPOLAGANJA + INTERVAL '2-5' YEAR TO MONTH > SYSDATE
GROUP BY S.SIFRAMODULA
HAVING COUNT(*)>10 AND COUNT(*) < (SELECT MAX(COUNT(*))
FROM POLAGANJE POL JOIN STUDENT S1 ON S1.BROJINDEKSA = POL.BROJINDEKSA
WHERE POL.DATUMPOLAGANJA + INTERVAL '2-5' YEAR TO MONTH > SYSDATE
GROUP BY S1.SIFRAMODULA)
ORDER BY BROJ_MESECI;