milicagnjatovic / master_rad

0 stars 0 forks source link

Test opterećenosti servera #14

Open milicagnjatovic opened 7 months ago

milicagnjatovic commented 7 months ago

Cilj zadatka je proveriti koliko zahteva može da primi pregledač u jednom trenutku. Ideja je sa servera poslati više zahteva istovremeno.

milicagnjatovic commented 7 months ago

Test 1

Paralelno se šalje zahtev za pregledanje zadatka:

 {
    "userid": "2",
    "taskid": "31",
    "solution": "with tmp as (  select indeks, idpredmeta, count(distinct skgodina) as br_upisa  from da.upisankurs uk  group by indeks, idpredmeta ) (select distinct d.indeks, ime||' '||prezime as \"Ime i prezime\", sp.naziv as komentar,  case   when dayname(d.datupisa) is not null then dayname(d.datupisa)   when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja)  else null end as \"Naziv dana\" from da.dosije d join da.studentskistatus ss on d.idstatusa = ss.id and ss.naziv='Budzet' join tmp on d.indeks = tmp.indeks and br_upisa>4 join da.studijskiprogram sp on d.idprograma = sp.id join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta union select distinct d.indeks, ime||' '||prezime as \"Ime i prezime\",  p.naziv||' '||case when i.ocena>5 and status='o' then ocena else 5 end as komentar,  case   when dayname(d.datupisa) is not null then dayname(d.datupisa)   when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja)  else null end as \"Naziv dana\" from da.dosije d  join tmp on d.indeks = tmp.indeks and br_upisa=5 join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta join da.predmet p on i.idpredmeta=p.id) order by indeks asc, 4 desc;    "
  }

Izvršavanje koristi 5 niti za slanje 10 zahteva. Korišćen je ExecutorService dostupan u Javi.

Rezultat:

Result: {"requestId":"31-2","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: Already waiting for response
Result: Already waiting for response
Result: {"requestId":"31-2","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: Already waiting for response
Result: Already waiting for response
Result: Already waiting for response
Result: Already waiting for response
Result: Already waiting for response
Result: Already waiting for response

Vreme izvršavanja je 1.44 sekundi.

Zaključak

Očekivano je da je broj redova pogrešan jer je rešenje netačno. Kada se prvi pokušaj pošalje na testiranje u bazi će biti zabeleženo da se čeka odovor pregledača. Dok taj odgovor ne stigne rezultat će biti da se već čeka pregledanje (Already waiting for response). Na osnovu rezultata se vidi da je za dato vreme zadatak pregledan dva puta. Pre izvršavanja koda broj pregleda datog zadatka za datog studenta je bio 33 (_nosubmissions u tabeli). Nakon izvršavanja je ta vrednost postala 34, dok je očekivano 35 jer se na osnovu logova vidi da je zadatak pregledan dva puta. Razlog tome je što se submission dohvatio iz baze dva puta pre nego je prešao u čekanje (primećeno na osnovu dodatnih logova), i tada su poslata dva zahteva za pregledanje. Pre slanja zahteva za pregledanje je broj pokušaja povećan za 1, odnosno u oba slučaja je sa 33 povećan na 34.

milicagnjatovic commented 7 months ago

Test 2

Paralelno se šalje zahtev za pregledanje zadatka:

  {
    "userid": "2",
    "taskid": "31",
    "solution": "with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \"prosek\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \"komentar za studenta\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \"komentar za studenta\" desc;   "
  }

Vreme izvršavanja 1.52s.

Izvršavanje koristi 5 niti za slanje 10 zahteva. Korišćen je ExecutorService dostupan u Javi.

Rezultat

Result: Already waiting for response
Result: Already waiting for response
Result: Already waiting for response
Result: Already waiting for response
Result: {"requestId":"31-2","ok":true,"message":"OK | Execution time 1.251376263\n"}
Result: Already waiting for response
Result: Already waiting for response
Result: Already waiting for response
Result: Already waiting for response
Result: Already waiting for response

Zaključak

U ovom slučaju se šalje tačno rešenje na pregledanje. Identično prethodnom slučaju, dok se čeka pregledanje jednog pokušaja neće se slati drugi pokušaj, odnosno dobija se odgovor Already waiting for response. Za razliku od prethodnog pokušaja, ovde se zahtev za pregledanje pročitao i prebacio u stanje čekanja pre nego je druga nit stigla da pročita. Nakon izvršavanja se broj pokušaja (_nosubmissions) povećao za jedan, i broj tačnih pregledanja (_no_correctsubmissions) povećao za jedan.

milicagnjatovic commented 7 months ago

Test 3

Paralelno se šalje zahtev za pregledanje više zadataka od strane više studenata. Id studenta = [22, 23, 24, 25, 26 ] Id zadatka = [31, 32, 33, 32, 33, 34, 35, 36, 37, 38, 39] Ukupno 9*5=45 zahteva. Kao u prethodnim slučajevima se koristi 5 niti za slanje zahteva.

List<String> payloads = Arrays.asList(
    "{\"userid\":\"22\",\"taskid\":\"31\",\"solution\":\"with tmp as ( select indeks, idpredmeta, count(distinct skgodina) as br_upisa from da.upisankurs uk group by indeks, idpredmeta ) (select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", sp.naziv as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join da.studentskistatus ss on d.idstatusa = ss.id and ss.naziv='Budzet' join tmp on d.indeks = tmp.indeks and br_upisa>4 join da.studijskiprogram sp on d.idprograma = sp.id join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta union select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", p.naziv||' '||case when i.ocena>5 and status='o' then ocena else 5 end as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join tmp on d.indeks = tmp.indeks and br_upisa=5 join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta join da.predmet p on i.idpredmeta=p.id) order by indeks asc, 4 desc; \"}",
    "{\"userid\":\"23\",\"taskid\":\"31\",\"solution\":\"with tmp as ( select indeks, idpredmeta, count(distinct skgodina) as br_upisa from da.upisankurs uk group by indeks, idpredmeta ) (select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", sp.naziv as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join da.studentskistatus ss on d.idstatusa = ss.id and ss.naziv='Budzet' join tmp on d.indeks = tmp.indeks and br_upisa>4 join da.studijskiprogram sp on d.idprograma = sp.id join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta union select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", p.naziv||' '||case when i.ocena>5 and status='o' then ocena else 5 end as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join tmp on d.indeks = tmp.indeks and br_upisa=5 join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta join da.predmet p on i.idpredmeta=p.id) order by indeks asc, 4 desc; \"}",
    "{\"userid\":\"24\",\"taskid\":\"31\",\"solution\":\"with tmp as ( select indeks, idpredmeta, count(distinct skgodina) as br_upisa from da.upisankurs uk group by indeks, idpredmeta ) (select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", sp.naziv as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join da.studentskistatus ss on d.idstatusa = ss.id and ss.naziv='Budzet' join tmp on d.indeks = tmp.indeks and br_upisa>4 join da.studijskiprogram sp on d.idprograma = sp.id join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta union select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", p.naziv||' '||case when i.ocena>5 and status='o' then ocena else 5 end as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join tmp on d.indeks = tmp.indeks and br_upisa=5 join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta join da.predmet p on i.idpredmeta=p.id) order by indeks asc, 4 desc; \"}",
    "{\"userid\":\"25\",\"taskid\":\"31\",\"solution\":\"with tmp as ( select indeks, idpredmeta, count(distinct skgodina) as br_upisa from da.upisankurs uk group by indeks, idpredmeta ) (select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", sp.naziv as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join da.studentskistatus ss on d.idstatusa = ss.id and ss.naziv='Budzet' join tmp on d.indeks = tmp.indeks and br_upisa>4 join da.studijskiprogram sp on d.idprograma = sp.id join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta union select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", p.naziv||' '||case when i.ocena>5 and status='o' then ocena else 5 end as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join tmp on d.indeks = tmp.indeks and br_upisa=5 join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta join da.predmet p on i.idpredmeta=p.id) order by indeks asc, 4 desc; \"}",
    "{\"userid\":\"26\",\"taskid\":\"31\",\"solution\":\"with tmp as ( select indeks, idpredmeta, count(distinct skgodina) as br_upisa from da.upisankurs uk group by indeks, idpredmeta ) (select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", sp.naziv as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join da.studentskistatus ss on d.idstatusa = ss.id and ss.naziv='Budzet' join tmp on d.indeks = tmp.indeks and br_upisa>4 join da.studijskiprogram sp on d.idprograma = sp.id join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta union select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", p.naziv||' '||case when i.ocena>5 and status='o' then ocena else 5 end as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join tmp on d.indeks = tmp.indeks and br_upisa=5 join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta join da.predmet p on i.idpredmeta=p.id) order by indeks asc, 4 desc; \"}",

    "{\"userid\":\"22\",\"taskid\":\"32\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"23\",\"taskid\":\"32\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"24\",\"taskid\":\"32\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"25\",\"taskid\":\"32\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"26\",\"taskid\":\"32\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",

    "{\"userid\":\"22\",\"taskid\":\"33\",\"solution\":\"with tmp as ( select indeks, idpredmeta, count(distinct skgodina) as br_upisa from da.upisankurs uk group by indeks, idpredmeta ) (select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", sp.naziv as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join da.studentskistatus ss on d.idstatusa = ss.id and ss.naziv='Budzet' join tmp on d.indeks = tmp.indeks and br_upisa>4 join da.studijskiprogram sp on d.idprograma = sp.id join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta union select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", p.naziv||' '||case when i.ocena>5 and status='o' then ocena else 5 end as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join tmp on d.indeks = tmp.indeks and br_upisa=5 join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta join da.predmet p on i.idpredmeta=p.id) order by indeks asc, 4 desc; \"}",
    "{\"userid\":\"23\",\"taskid\":\"33\",\"solution\":\"with tmp as ( select indeks, idpredmeta, count(distinct skgodina) as br_upisa from da.upisankurs uk group by indeks, idpredmeta ) (select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", sp.naziv as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join da.studentskistatus ss on d.idstatusa = ss.id and ss.naziv='Budzet' join tmp on d.indeks = tmp.indeks and br_upisa>4 join da.studijskiprogram sp on d.idprograma = sp.id join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta union select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", p.naziv||' '||case when i.ocena>5 and status='o' then ocena else 5 end as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join tmp on d.indeks = tmp.indeks and br_upisa=5 join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta join da.predmet p on i.idpredmeta=p.id) order by indeks asc, 4 desc; \"}",
    "{\"userid\":\"24\",\"taskid\":\"33\",\"solution\":\"with tmp as ( select indeks, idpredmeta, count(distinct skgodina) as br_upisa from da.upisankurs uk group by indeks, idpredmeta ) (select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", sp.naziv as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join da.studentskistatus ss on d.idstatusa = ss.id and ss.naziv='Budzet' join tmp on d.indeks = tmp.indeks and br_upisa>4 join da.studijskiprogram sp on d.idprograma = sp.id join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta union select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", p.naziv||' '||case when i.ocena>5 and status='o' then ocena else 5 end as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join tmp on d.indeks = tmp.indeks and br_upisa=5 join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta join da.predmet p on i.idpredmeta=p.id) order by indeks asc, 4 desc; \"}",
    "{\"userid\":\"25\",\"taskid\":\"33\",\"solution\":\"with tmp as ( select indeks, idpredmeta, count(distinct skgodina) as br_upisa from da.upisankurs uk group by indeks, idpredmeta ) (select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", sp.naziv as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join da.studentskistatus ss on d.idstatusa = ss.id and ss.naziv='Budzet' join tmp on d.indeks = tmp.indeks and br_upisa>4 join da.studijskiprogram sp on d.idprograma = sp.id join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta union select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", p.naziv||' '||case when i.ocena>5 and status='o' then ocena else 5 end as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join tmp on d.indeks = tmp.indeks and br_upisa=5 join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta join da.predmet p on i.idpredmeta=p.id) order by indeks asc, 4 desc; \"}",
    "{\"userid\":\"26\",\"taskid\":\"33\",\"solution\":\"with tmp as ( select indeks, idpredmeta, count(distinct skgodina) as br_upisa from da.upisankurs uk group by indeks, idpredmeta ) (select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", sp.naziv as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join da.studentskistatus ss on d.idstatusa = ss.id and ss.naziv='Budzet' join tmp on d.indeks = tmp.indeks and br_upisa>4 join da.studijskiprogram sp on d.idprograma = sp.id join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta union select distinct d.indeks, ime||' '||prezime as \\\"Ime i prezime\\\", p.naziv||' '||case when i.ocena>5 and status='o' then ocena else 5 end as komentar, case when dayname(d.datupisa) is not null then dayname(d.datupisa) when dayname(i.datpolaganja) is not null then dayname(i.datpolaganja) else null end as \\\"Naziv dana\\\" from da.dosije d join tmp on d.indeks = tmp.indeks and br_upisa=5 join da.ispit i on d.indeks = i.indeks and tmp.idpredmeta=i.idpredmeta join da.predmet p on i.idpredmeta=p.id) order by indeks asc, 4 desc; \"}",

    "{\"userid\":\"22\",\"taskid\":\"34\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"23\",\"taskid\":\"34\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"24\",\"taskid\":\"34\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"25\",\"taskid\":\"34\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"26\",\"taskid\":\"34\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",

    "{\"userid\":\"22\",\"taskid\":\"35\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"23\",\"taskid\":\"35\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"24\",\"taskid\":\"35\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"25\",\"taskid\":\"35\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"26\",\"taskid\":\"35\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",

    "{\"userid\":\"22\",\"taskid\":\"36\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"23\",\"taskid\":\"36\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"24\",\"taskid\":\"36\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"25\",\"taskid\":\"36\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"26\",\"taskid\":\"36\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",

    "{\"userid\":\"22\",\"taskid\":\"37\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"23\",\"taskid\":\"37\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"24\",\"taskid\":\"37\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"25\",\"taskid\":\"37\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"26\",\"taskid\":\"37\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",

    "{\"userid\":\"22\",\"taskid\":\"38\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"23\",\"taskid\":\"38\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"24\",\"taskid\":\"38\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"25\",\"taskid\":\"38\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"26\",\"taskid\":\"38\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",

    "{\"userid\":\"22\",\"taskid\":\"39\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"23\",\"taskid\":\"39\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"24\",\"taskid\":\"39\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"25\",\"taskid\":\"39\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}",
    "{\"userid\":\"26\",\"taskid\":\"39\",\"solution\":\"with prosek_smer_dip as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i right join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is not null and i.ocena > 5 and i.status = 'o' group by d.idprograma ), student_prosek as( select d.indeks, coalesce(avg(ocena + 0.0), -1.0) prosek, count(ocena) br_polozenih from da.dosije d left join da.ispit i on d.indeks = i.indeks and i.ocena > 5 and i.status = 'o' group by d.indeks ), prosek_smer_nije as ( select d.idprograma, avg(ocena + 0.0) prosek from da.ispit i join da.dosije d on d.indeks = i.indeks and d.datdiplomiranja is null where i.ocena > 5 and i.status = 'o' group by d.idprograma ) select d.ime, d.prezime, sp.prosek \\\"prosek\\\", case when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek > psd.prosek then 'Prosek bolji od proseka smera' when d.datdiplomiranja is not null and sp.prosek >= 7.5 and sp.prosek <= 9 and sp.prosek <= psd.prosek then sp.naziv || ' ima bolji prosek' when d.datdiplomiranja is null and sp.br_polozenih = 0 then 'Nema ispita' when d.datdiplomiranja is null and sp.br_polozenih in (2,3,5,7,9) then case when sp.prosek > psn.prosek then 'Odlicno za sad' else 'moze bolje' end else null end \\\"komentar za studenta\\\" from da.dosije d join student_prosek sp on d.indeks = sp.indeks join prosek_smer_dip psd on d.idprograma = psd.idprograma join prosek_smer_nije psn on d.idprograma = psn.idprograma join da.studijskiprogram sp on d.idprograma = sp.id order by \\\"komentar za studenta\\\" desc; \"}"
);

Rezultat

Result: {"requestId":"31-22","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"31-23","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"31-24","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"31-25","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"31-26","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"32-22","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"32-23","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"32-24","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"32-25","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"32-26","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"33-22","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"33-23","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"33-24","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"33-25","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"33-26","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"34-22","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"34-23","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"34-24","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"34-25","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"34-26","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"35-22","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"35-23","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"35-24","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"35-25","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"35-26","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"36-22","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"36-23","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"36-24","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"36-25","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"36-26","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"37-22","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"37-23","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"37-24","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"37-25","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"37-26","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"38-22","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"38-23","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"38-24","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"38-25","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"38-26","ok":false,"message":"User error | Syntax error\n"}
Result: {"requestId":"39-22","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"39-23","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"39-24","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"39-25","ok":false,"message":"User error | Incorrect number of rows\n"}
Result: {"requestId":"39-26","ok":false,"message":"User error | Incorrect number of rows\n"}
Time difference 12738

Vreme izvršavanja 12.73s.

Zaključak

Svaki zahtev je dobio odgovor.

milicagnjatovic commented 7 months ago

Test 4

Test je identičan prethodnom, razlika je što se ovde koristi 45 umesto 5 niti.

Rezultat

Poruke su slične kao u prethodnom primeru, sa izuzetkom da neki zadaci nisu dohvaćeni i da se javlja greška da je dostgnut maksimalan broj konekcija:

Error performing load command : org.hibernate.HibernateException: The internal connection pool has reached its maximum size and no connection is currently available!

Izmene sistema da bi obradio više zahteva

Promena maksimalnog broja konekcija na bazu grader komandom

db2 update db cfg for grader using maxappls 100

U hibernate.cfg se definiše maksimalan broj konekcija:

<property name="hibernate.connection.pool_size">50</property>

Zaključak

Maksimalan broj konekcija može da se poveća. Na osnovu kraćeg istraživanja, u ovakivim situacijama je preporuka da se koriste bibilioteke koje vode računa o konekcijama poput HikariCP. TBD Broj pristupa bazi ne može da se smanji iz narednih razloga:

milicagnjatovic commented 6 months ago

Test 5

Paralelno je slato 100 zahteva za pregledanje. Svi poslati upiti su tačna rešenja zadataka.

Prvi slučaj

U bazi nije bilo prethodno pregledanih radova. Izvršavanjem je u bazu uneto 100 redova. Od 100 radova je 99 tačno pregledano, dok je jedan prekoračio vremensko ograničenje.

Drugi slučaj

U bazi je bilo 100 prethodno pregledanih radova. Izvršavanjem se izmenilo 100 postojećih redova, to se vidi po vremenu izvršavanja ( _last_updatetime ). I u ovom slučaju je 99 radova tačno pregledano, dok je jedan prekoračio vremenski limit. Međutim u drugom izvršavanu je nije isti rad prekoračio vremenski limit. To se vidi po broju tačnih radova ( _no_correctsubmissions ), broju ukupno pregledanih radova ( _nosubmissions ) i po tome da li je poslednje pregledanje tačno ( _iscorrect ).