Moji zadaci i rješenja:
Ispisati podatke o praznim predmetnim grupama iz akademske godine 2016./2017. ( ispisivati: naziv predmeta, oznaku grupe, akademsku godinu i šifru nastavnika). Prazne predmetne grupe su one predmetne grupe kojima (te akademske godine) nije bio pridijeljen niti jedan student. U obzir uzeti samo one predmete kojima te akademske godine nije bio pridijeljen niti jedan drugi nastavnik.
Primjer rezultata:
nazPredmet | ozngrupa | akgodina | sifnastavnik |
Logička algebra | D-B2 | 2016 | 570 |
Logička algebra | D-B3 | 2016 | 570 |
Vještine komuniciranja | D-A5 | 2016 | 480 |
… | … | … | … |
Tumačenje prvog retka rezultata: akademske godine 2016./2017. je definirano da grupi “D-B2” nastavnik sa šifrom 570 predaje predmet “Logička algebra”, ali niti jedan student nije bio raspoređen u tu grupu. Također, Logičku algebru je te akademske godine predavao samo nastavnik sa šifrom 570.
SELECT nazpredmet, ozngrupa, akgodina, sifnastavnik
FROM predmetgrupa AS prgr JOIN predmet ON prgr.sifpredmet = predmet.sifpredmet
WHERE akgodina = 2016
AND NOT EXISTS (
SELECT * FROM upisanpredmet
WHERE sifpredmet = prgr.sifpredmet
AND ozngrupa = prgr.ozngrupa
AND akgodina = prgr.akgodina
) AND (
SELECT COUNT(DISTINCT sifnastavnik) FROM predmetgrupa
WHERE sifpredmet = prgr.sifpredmet
AND akgodina = prgr.akgodina
) = 1;
Ispisati nazive onih predmeta za koje je broj studenata koji su predmet položili ocjenom 4 ili 5 veći od broja studenata koji su taj isti predmet položili ocjenom 2 ili 3. Pored naziva predmeta ispisati i broj studenata koji su uspješno položili taj predmet.
Zapise poredati po broju studenata koji su položili predmet tako da se na vrhu popisa nalaze predmeti s najvećim brojem, a nazive predmeta s jednakim brojem poredati abecedno.
SELECT nazpredmet, COUNT(*)
FROM predmet AS pred JOIN upisanpredmet ON pred.sifpredmet = upisanpredmet.sifpredmet
WHERE ocjena > 1
AND (
SELECT COUNT(*) FROM upisanpredmet
WHERE sifpredmet = pred.sifpredmet
AND ocjena >= 4
) > (
SELECT COUNT(*) FROM upisanpredmet
WHERE sifpredmet = pred.sifpredmet
AND ocjena > 1
AND ocjena < 4
)
GROUP BY nazpredmet
ORDER BY COUNT(DISTINCT jmbag) DESC, nazpredmet ASC;
Ispisati JMBAG, prezime i ime studenata koji ne stanuju u istoj županiji u kojoj su i rođeni, a na dan koji pripada prošloj kalendarskoj godini su iz bilo kojeg predmeta dobili ocjenu 4. Pored JMBAG-a, imena i prezimena studenta ispisati naziv županije rođenja i naziv županije stanovanja. Upit mora biti neovisan o trenutku izvođenja. U rezultatu se ne smiju pojavljivati jednake n-torke (duplikati) a njihov poredak nije bitan.
SELECT DISTINCT student.jmbag, imestudent, prezimestudent, zupanijaRod.nazzupanija, zupanijaStan.nazzupanija
FROM student JOIN upisanpredmet ON student.jmbag = upisanpredmet.jmbag
JOIN mjesto AS mjestoStan ON mjestoStan.pbr = pbrstanstudent
JOIN zupanija AS zupanijaStan ON zupanijaStan.sifzupanija = mjestoStan.sifzupanija
JOIN mjesto AS mjestoRod ON mjestoRod.pbr = pbrrodstudent
JOIN zupanija AS zupanijaRod ON zupanijaRod.sifzupanija = mjestoRod.sifzupanija
WHERE zupanijaRod.sifzupanija <> zupanijaStan.sifzupanija
AND EXTRACT(YEAR FROM CURRENT_DATE) - 1 = EXTRACT(YEAR FROM datumocjena)
AND upisanpredmet.ocjena = 4;
Ispisati različite datume na koje su studenti osvojili prolaznu ocjenu iz predmeta (stupac nazvati datum_ocjene
), broj studenata koji su tog dana osvojili prolaznu ocjenu (stupac nazvati broj_kandidata
) te prosječnu prolaznu ocjenu koju su kandidati tog datuma dobili (stupac nazvati prosjek_ocjena
). Prosječnu ocjenu zaokružiti na 2 decimalne znamenke. Ispisati podatke samo za one datume na kojima nitko nije dobio ocjenu manju od 4, a ostale zanemariti.
Napomena: Ako je jedan student na isti datum polagao više ispita, u broj_kandidata
treba ga uračunati više puta.
SELECT datumocjena AS datum_ocjene, COUNT(*) AS broj_kandidata, ROUND(AVG(ocjena), 2) AS prosjek_ocjena
FROM upisanpredmet LEFT JOIN student ON upisanpredmet.jmbag = student.jmbag
WHERE ocjena > 1
GROUP BY datum_ocjene
HAVING MIN(ocjena) >= 4
Za zadanu relacijsku shemu STUDSTIP={ime, prezime, jmbag, prosjekOcjena}
napisati naredbu kojom će se napraviti relacija studStip(STUDSTIP)
. Tipovi podataka neka budu sljedeći:
ime
, prezime
- VARCHAR(25)
jmbag
- VARCHAR(10)
prosjekOcjena
- NUMERIC(5, 2)
U relaciju studStip
upisati studente koji imaju prosjek ocjena veći ili jednak 4 (u prosjek ocjena ulaze samo pozitivne ocjene).
CREATE TABLE studStip(
ime VARCHAR(25),
prezime VARCHAR(25),
jmbag VARCHAR(10),
prosjekOcjena NUMERIC(5, 2)
);
INSERT INTO studStip(ime, prezime, jmbag, prosjekOcjena)
SELECT imestudent, prezimestudent, student.jmbag, AVG(ocjena)
FROM student LEFT JOIN upisanpredmet ON student.jmbag = upisanpredmet.jmbag
WHERE ocjena > 1
GROUP BY imestudent, prezimestudent, student.jmbag
HAVING AVG(ocjena) >= 4;