Databázy - cvičenie - 5. týždeň
Created: 2008-10-15 - 17:17
use poliklinika go select * from pacienti order by mesPrijem desc -- A a) Najdite najmensi mesacny prijem select min(mesPrijem) from pacienti --bez pouzitia min select mesPrijem from pacienti where mesPrijem <= ALL (Select mesPrijem from pacienti where mesPrijem is not null) --alebo cez top select top(1) mesPrijem from pacienti where mesPrijem is not null order by mesPrijem asc -- b) vypiste aj krstne meno select krstne, mesPrijem from pacienti where mesPrijem = (select min(mesPrijem) from pacienti) --bez pouzitia min select mesPrijem,krstne from pacienti where mesPrijem <= ALL (Select mesPrijem from pacienti where mesPrijem is not null) --alebo cez top select top(1) mesPrijem, krstne from pacienti where mesPrijem is not null order by mesPrijem asc -- c) zistite druhy najmensi prijem (pomocou min) select min(mesPrijem) from pacienti where mesPrijem > (select min(mesPrijem) from pacienti) -- d) to iste co c) + zistite krstne select krstne, mesPrijem from pacienti where mesPrijem = (select min(mesPrijem) from pacienti where mesPrijem > (select min(mesPrijem) from pacienti)) -- e) to iste co d) len treti minimalny prijem select krstne, mesPrijem from pacienti where mesPrijem = (select min(mesPrijem) from pacienti where mesPrijem > (select min(mesPrijem) from pacienti where mesPrijem > (select min(mesPrijem) from pacienti))) -- f) to co e) len bez pouzitia min -- toto nejde select mesPrijem,krstne from pacienti where mesPrijem >= ALL (select mesPrijem from pacienti where mesPrijem > ALL (Select mesPrijem from pacienti where mesPrijem <= ALL (select mesPrijem from pacienti where mesPrijem is not null))) -- ideme cez novu funkciu RANK() select p2.krstne, p2.mesPrijem from (select p1.krstne, p1.mesPrijem, Rank() over(order by p1.mesPrijem ASC) as poradie from pacienti p1 where p1.mesPrijem is not null )p2 where p2.poradie = 1 -- ak pridame: and p2.mesPrijem is not null; pise bludy -- B a)usporiadajte pacientov podla mesPrijem a vypiste aj poradia: select p2.idP,p2.krstne,p2.mesPrijem, (select count(*) from pacienti p1 where p1.mesPrijem <= p2.mesPrijem) from pacienti p2 order by p2.mesPrijem -- pre kazdy riadok spocita pocet tych co ma mensi plat --b) alebo pomocou rank() select p.idP, p.krstne, p.mesPrijem, rank() over(order by p.mesPrijem asc) as poradie from pacienti p order by p.mesPrijem -- ale toto sa nevysporiadalo s null hodnotami... takze napr.: --c) alebo bez null a cez row_number() select p1.krstne,p1.idP,p1.mesPrijem, row_number() over(order by mesPrijem) from pacienti p1 where p1.mesPrijem is not null --d) alebo bez null a cez row_number() select p1.krstne,p1.idP,p1.mesPrijem, dense_rank() over(order by mesPrijem) from pacienti p1 where p1.mesPrijem is not null --e) pozrime sa aj co robi ntile(i) select p1.krstne,p1.idP,p1.mesPrijem, ntile(5) over(order by mesPrijem) from pacienti p1 where p1.mesPrijem is not null --cize na i-skupin(y)