[ solarko @ 17.02.2007. 07:29 ] @
poz


imam tabele

IZNAJMIO(#id,ko,kojukasetu) // koji clan koju kasetu moze i vise puta
Kaseta(#kojukasetu,kojifilm) // koji film je na toj kaseti
Zanr(#zanr) // akcija,drama ...
Film(#kojifilm,kojizanr) // brus li->akcija
Clan(#ko,ime) ///125, Pera

Kako da nadjem za svaki zanr koliko je puta gledan i ko je najvise puta gledao taj zanr u jednom upitu?

[ goranvuc @ 17.02.2007. 07:58 ] @
Nisi nam rekao koji je DBMS u pitanju, ali evo ti primer za MS SQL ili Access 2002/2003 (LEFT JOIN da bi dobio rezultat i za zanrove koji nisu uopste gledani, a ako hoces samo zanrove koji su gledani onda stavi INNER):
Code:

SELECT Zanr, UkupnoGledan, ZanrManijak, MaxZanrClan 
FROM 
    (SELECT Film.kojizanr AS Zanr, COUNT(*) AS UkupnoGledan 
    FROM (Film 
    LEFT JOIN Kaseta ON Film.kojifilm = Kaseta.kojifilm) 
    INNER JOIN Iznajmio ON Kaseta.kojukasetu = Iznajmio.kojukasetu 
    GROUP BY Film.kojizanr) 
AS Zanrovi 
LEFT JOIN 
    (SELECT MAX(UkupnoZanrClan) AS MaxZanrClan, ZanrManijak, kojizanr 
    FROM 
        (SELECT Clan.ime AS ZanrManijak, Film.kojizanr, COUNT(*) AS UkupnoZanrClan 
        FROM ((Film 
        INNER JOIN Kaseta ON Film.kojifilm = Kaseta.kojifilm) 
        INNER JOIN Iznajmio ON Kaseta.kojukasetu = Iznajmio.kojukasetu) 
        INNER JOIN Clan ON Iznajmio.ko = Clan.ko
        GROUP BY Clan.ime AS ZanrManijak, Film.kojizanr) AS UkupnoClanoviZanrovi 
    GROUP BY ZanrManijak, kojizanr) 
AS ZanrManijaci ON Zanrovi.Zanr = ZanrManijaci.kojizanr

Eto, nisam probao vec sam direktno ovde pisao SQL, tako da izvini ako ima neka greska, bitna je ideja. U svakom slucaju ovde dobijas po zanrovima ukupan broj gledanja, clana koji je najvise gledao odredjen zanr (ZanrManijak) kao i koliko puta je gledao taj zanr (ono sto nisi trazio, ali posto vec imamo taj podatak - zasto ga ne prikazati).