CCCPaste

d3a266140cdb6



1. Prikazati spojeno ime i prezime, kao i grad za sve polaznike čije se 
prezime završava na „lovic“ i koji imaju manje od 29 godina.

SELECT (IME ||' '|| PREZIME) AS "IME I PREZIME", GRAD
FROM POLAZNIK
WHERE LOWER(PREZIME) LIKE '%lovic'

########################################################

2. Prikazati ID i naziv kursa i jezik (format jezika videti na slici) 
za sve kurseve koji se slušaju na engleskom jeziku i koji su se 
završili (održali) pre više od 9 godina.  
NAPOMENA: Zahtev realizovati korišćenjem podupita.

SELECT KURSID, NAZIVKURSA, SUBSTR(JEZIK,1,3) ||'.' AS JEZIK
FROM KURS
WHERE JEZIK LIKE 'engleski' AND KURSID IN (SELECT KURSID
                FROM TERMIN
                WHERE DATUMOD + INTERVAL '9' YEAR < SYSDATE);

########################################################

3. Prikazati broj kurseva i broj različitih oblasti po jezicima na kojima se slušaju. 
U rezultatu ne treba prikazivati 
kurseve koji se slušaju na srpskom jeziku i koji imaju tri ili više različitih oblasti.

SELECT COUNT(*) AS BROJ_KURSEVA, COUNT(DISTINCT OBLAST) AS BROJ_OBLASTI 
FROM KURS 
WHERE JEZIK NOT LIKE 'srp%' 
GROUP BY JEZIK HAVING COUNT(DISTINCT OBLAST) < 3

########################################################

4.Prikazati id kursa, naziv kursa i broj različitih predavača za 
sve kurseve čija je najmanja cena veća od svih 
prosečnih cena kurseva čiji termini se održavaju u učionici B020.

SELECT K.KURSID, K.NAZIVKURSA, COUNT(DISTINCT T.PREDAVAC)
FROM KURS K JOIN TERMIN T ON K.KURSID = T.KURSID
GROUP BY K.KURSID, K.NAZIVKURSA
HAVING MIN(T.CENA) > (SELECT AVG(T1.CENA)
                    FROM TERMIN T1
                    WHERE T1.BROJUCIONICE = 'B020');

########################################################

5. Prikazati id kursa, datum početka termina i naziv kursa i broj 
prijavljenih kandidata po terminu, broj ispravnih 
prijava (prijava pre početka termina) i broj 
neispravnih prijava (prijava posle početka termina) za sve kurseve 
jezika.

SELECT K.KURSID, T.DATUMOD, K.NAZIVKURSA, COUNT(*) AS BROJ_PRIJAVLJENIH,
        SUM(CASE WHEN P.DATUMPRIJAVE < T.DATUMOD THEN 1 ELSE 0 END) AS BROJ_ISPRAVNIH,
        SUM(CASE WHEN P.DATUMPRIJAVE > T.DATUMOD THEN 1 ELSE 0 END) AS BROJ_NEISPRAVNIH
FROM TERMIN T JOIN KURS K ON K.KURSID = T.KURSID
JOIN PRIJAVA P ON (T.DATUMOD,T.KURSID) = (P.DATUMOD,P.KURSID)
WHERE K.OBLAST = 'Programiranje'
GROUP BY K.KURSID, T.DATUMOD, K.NAZIVKURSA;

########################################################

6. Pronaći šifre svih kurseva koji se mogu dobiti kao 
gratis kursevi za kurs ‘C#’ (uzeti u obzir i gratis kurseve 
njegovog gratis kursa itd.). 

WITH GRATIS_KURSEVI(GRATIS_KURS) AS
(
    SELECT KURSGRATIS
    FROM KURS
    WHERE NAZIVKURSA = 'Programiranje u C#'
        UNION ALL
    SELECT KURSGRATIS
    FROM KURS K JOIN GRATIS_KURSEVI GK ON K.KURSID = GK.GRATIS_KURS
    WHERE KURSGRATIS IS NOT NULL
)

SELECT *
FROM GRATIS_KURSEVI

########################################################

7. Prikazati ime, prezime polaznika, cenu termina i inicijale 
imena i prezimena predavača za koji se polaznik 
odlučio, kao i to da li je polazniku prošao rođendan u tekućoj 
godini za sve polaznike koji imaju više od 26 ipo godina.  

I NACIN:

SELECT PO.IME, PO.PREZIME, T.CENA,
        CONCAT(SUBSTR(P.IME,1,1),SUBSTR(P.PREZIME,1,1)) AS INICIJALI,
        CASE 
            WHEN EXTRACT(MONTH FROM DATUMRODJENJA) < EXTRACT(MONTH FROM SYSDATE)
             OR EXTRACT(DAY FROM DATUMRODJENJA) <= EXTRACT(DAY FROM SYSDATE)
                    AND EXTRACT(MONTH FROM DATUMRODJENJA) = EXTRACT(MONTH FROM SYSDATE)
                THEN 'PROSAO RODJENDAN'
            ELSE 'NIJE PROSAO RODJENDAN'
            END AS RODJENDAN
FROM POLAZNIK PO JOIN PRIJAVA PR ON PO.POLAZNIKID = PR.POLAZNIKID
JOIN TERMIN T ON (PR.DATUMOD,PR.KURSID) = (T.DATUMOD,T.KURSID)
JOIN PREDAVAC P ON T.PREDAVAC = P.PREDAVACID
WHERE MONTHS_BETWEEN(SYSDATE, PO.DATUMRODJENJA)/12 > 26.5;

---------------------------------------------------------

II NACIN:

SELECT PO.IME, PO.PREZIME, T.CENA,
        CONCAT(SUBSTR(P.IME,1,1),SUBSTR(P.PREZIME,1,1)) AS INICIJALI,
        CASE
            WHEN EXTRACT(MONTH FROM DATUMRODJENJA) < EXTRACT(MONTH FROM SYSDATE)
                 THEN 'PROSAO RODJENDAN'
            WHEN EXTRACT(MONTH FROM DATUMRODJENJA) > EXTRACT(MONTH FROM SYSDATE)
                 THEN 'NIJE PROSAO RODJENDAN'
            WHEN EXTRACT(DAY FROM DATUMRODJENJA) <= EXTRACT(DAY FROM SYSDATE)
                 THEN 'PROSAO RODJENDAN'
            ELSE 'NIJE PROSAO RODJENDAN'
        END AS RODJENDAN
FROM POLAZNIK PO JOIN PRIJAVA PR ON PO.POLAZNIKID = PR.POLAZNIKID
JOIN TERMIN T ON (PR.DATUMOD,PR.KURSID) = (T.DATUMOD,T.KURSID)
JOIN PREDAVAC P ON T.PREDAVAC = P.PREDAVACID
WHERE MONTHS_BETWEEN(SYSDATE, PO.DATUMRODJENJA)/12 > 26.5;

########################################################

8. Prikazati naziv kurseva i broj termina za kurseve za sve termine 
koji imaju gratis kurs i čija je minimalna cena 
manja od svih cena termina čije su prijave 
realizovane u septembru ili oktobru.

SELECT K.NAZIVKURSA, COUNT(*) AS BROJ_TERMINA
FROM KURS K JOIN TERMIN T ON K.KURSID = T.KURSID
WHERE K.KURSGRATIS IS NOT NULL
GROUP BY K.NAZIVKURSA
HAVING MIN(T.CENA) < (SELECT MIN(T.CENA)
                        FROM TERMIN T JOIN PRIJAVA PR ON (T.KURSID,T.DATUMOD)=(PR.KURSID,PR.DATUMOD)
                        WHERE EXTRACT(MONTH FROM PR.DATUMPRIJAVE) IN (9,10));


########################################################

9.Prikazati id kursa, id predavača, ukupne cene termina 
prema predavačima i kursevima, ali i zbirno prema 
kursevima, kao i ukupnu cenu svih termina za termine 
u kojima ime predavača počinje na slovo J.

SELECT K.KURSID, T.PREDAVAC, SUM(T.CENA)
FROM KURS K JOIN TERMIN T ON K.KURSID = T.KURSID
JOIN PREDAVAC P ON T.PREDAVAC = P.PREDAVACID
WHERE P.IME LIKE 'J%'
GROUP BY ROLLUP( K.KURSID, T.PREDAVAC)