Postavku i bazu možete preuzeti ovde.
-- 1. Zadatak select id_etape, sum(duzina_staze) from etape group by id_etape -- 2. Zadatak select ime from vozaci where id_vozaca in ( select distinct id_vozaca from prolazna_vremena where DATEDIFF(MINUTE, vreme_starta, vreme_prolaska_kroz_cilj) < 60 ) -- 3. Zadatak create view vozaci_sa_stazama as select * from vozaci v, etape e select ime from vozaci_sa_stazama vss left join prolazna_vremena pv on vss.id_vozaca = pv.id_vozaca and vss.id_etape = pv.id_etape and vss.redni_broj_staze = pv.redni_broj_staze where pv.id_etape is null -- 4. zadatak select ime from vozaci where id_vozaca in ( select id_vozaca from prolazna_vremena where vreme_prolaska_kroz_cilj is null group by id_vozaca having count(*) > 1 ) -- 5. zadatak /* Za svako prolazno vreme odredi tip vozila i izracunaj prolazno vreme. Kolona vreme_prolaska_kroz_cilj je dodata zbog 7. zadatka. */ create view vremena as select vozila.id_tipa, pv.id_etape, pv.redni_broj_staze, pv.id_vozaca, vozaci.ime, DATEDIFF(MILLISECOND, pv.vreme_starta, pv.vreme_prolaska_kroz_cilj) prolaznoVreme, pv.vreme_prolaska_kroz_cilj from prolazna_vremena pv join vozaci on pv.id_vozaca = vozaci.id_vozaca join vozila on vozaci.id_vozila = vozila.id_vozila where pv.vreme_prolaska_kroz_cilj is not null /* Za svaku stazu pronadji pobednika, a zatim za svakog vozaca, po tipu, izracunaj koliko ima pobeda. */ create view Pobede as select v1.ime, v1.id_tipa, count(*) brojPobeda from vremena v1 left join vremena v2 on v1.id_tipa = v2.id_tipa and v1.id_etape = v2.id_etape and v1.redni_broj_staze = v2.redni_broj_staze and v1.prolaznoVreme > v2.prolaznoVreme where v2.id_etape is null group by v1.id_tipa, v1.id_vozaca, v1.ime /* U postavci zadatka stoji naznaceno da jedan vozac moze voziti jednu stazu => vozac je deo resenja ako ima pobeda koliko ima staza. */ select * from Pobede where brojPobeda = (select count(*) from etape) -- 6. zadatak /* Za svako prolazno vreme pronadji koliko ima boljih prolaznih vremena za dati tip vozila, etapu i stazu */ create view plasmaniSesti as select *, ( select count(*) + 1 from vremena v2 where v1.id_tipa = v2.id_tipa and v1.id_etape = v2.id_etape and v1.redni_broj_staze = v2.redni_broj_staze and v1.prolaznoVreme > v2.prolaznoVreme ) as Plasman from vremena v1 select ime, id_tipa, id_etape, redni_broj_staze, id_vozaca, Plasman from plasmaniSesti order by id_tipa, id_etape, redni_broj_staze, Plasman -- 7. /* Vozaci koji NISU deo resenja Za svaki plasman pl1 nekog vozaca, pokusaj da nadjes njegov losiji plasman pl2 koji je ostvaren posle pl1 */ create view NisuResenje as select distinct id_vozaca from plasmaniSesti pl1 where exists ( select * from plasmaniSesti pl2 where pl1.id_vozaca = pl2.id_vozaca and pl1.vreme_prolaska_kroz_cilj < pl2.vreme_prolaska_kroz_cilj and pl1.Plasman < pl2.[Plasman] ) /* Vozaci koji su deo resenja */ select * from vozaci where id_vozaca not in (select id_vozaca from NisuResenje) -- 8. Zadatak select ime, sum( case Plasman when 1 then 10 when 2 then 7 when 3 then 5 when 4 then 3 else 0 end ) as brojPoena from plasmaniSesti where id_tipa = (select id_tipa from tip_vozila where naziv = 'automobil') group by id_vozaca, ime