• 5 odgovora
  • 3.421 pregleda
pomoč top funckija 08.02.2012. u 12:42 · pre 179 meseci #1
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!
Re: pomoč top funckija 08.02.2012. u 13:07 · pre 179 meseci #2
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).
Potpis
/*A sad odo` malo napolje*/
Re: pomoč top funckija 08.02.2012. u 13:34 · pre 179 meseci #3
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
Re: pomoč top funckija 09.02.2012. u 08:51 · pre 179 meseci #4
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.
Potpis
/*A sad odo` malo napolje*/
Re: pomoč top funckija 09.02.2012. u 10:54 · pre 179 meseci #5
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;
Re: pomoč top funckija 09.02.2012. u 12:48 · pre 179 meseci #6
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
Potpis
"Common sense is not so common." - Voltaire
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme