II kolokvijum 2017/2018

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