[ cickozg @ 08.02.2012. 12:42 ] @
Pozdrav ljudi,
početnik sam u sql-u i trebala bi mi pomoč.

Dakle zanima me kako bi mogao ubaciti top funkciju koja bi vracala zadani broj najboljih studenata u sljedeci kod

select student.prezime,student.ime,avg(ocjene.ocjena)
from student,ocjene
where student.jmbag=ocjene.jmbag and ocjene.ocjena>1
group by student.prezime
order by avg(ocjene.ocjena) desc;

Hvala unaprijed!
[ mret @ 08.02.2012. 13:07 ] @
Code:
select student.prezime,student.ime,avg(ocjene.ocjena)
from student,ocjene
where student.jmbag=ocjene.jmbag and ocjene.ocjena>1
group by student.prezime
order by avg(ocjene.ocjena) desc


Pametnije ti je da ovde radis group by po PK (primary key), umesto
Code:
group by student.prezime

jer sta se desi ako imas Marka Markovica i Petra Markovica?
tip
Code:
GROUP by student.id



a za TOP funkciju (pretpostavljam da je to prvih N studenata) koristi
Code:
... limit N
(N-je onoliko koliko ti zapisa treba da vrati).
[ cickozg @ 08.02.2012. 13:34 ] @
Hvala ti na ovome, no upravo ovo grupiranje me sad dovelo do novog problema. Dakle kako bi sada izbacio iz prikaza ove što imaju jednu ili više ocjena 1, dakle da se u prosjek obzir uzmu samo studenti koji imaju pozitivne ocjene? Jer ovaj uvijet što sam postavio pod where
Code:
 ocjene.ocjena>1

ne funkcionira
[ mret @ 09.02.2012. 08:51 ] @
Kada imas AGREGATNE funckije (Group by...)

onda uslov grupe radis sa HAVING kaluzulom.
HAVING odredjuje uslov grupe kada je agregatna funkcija realizovana.

Probaj tako mozda bude kako treba.
[ bantu @ 09.02.2012. 10:54 ] @
Probaj ovako nešto, moglo bi da radi:
Code:
select student.prezime, student.ime, avg(ocjene.ocjena)
from student,ocjene
where student.jmbag=ocjene.jmbag and student.jmbag not in (select distinct jmbag from ocjene where ocjena = 1)
group by student.jmbag
order by avg(ocjene.ocjena) desc
limit 10;
[ Shinhan @ 09.02.2012. 12:48 ] @
Ja bi to ovako uradio:

Code:

SELECT student.prezime, student.ime, AVG(ocjene.ocjena) AS prosecna_ocjena, MIN(ocjene.ocjena) AS najmanja_ocjena
FROM student 
 INNER JOIN ocjene ON student.jmbag = ocjene.jmbag
GROUP BY student.jmbag
HAVING najmanja_ocjena > 1
ORDER BY prosecna_ocjena DESC
LIMIT 10