Jak udělat vážený průměr známek

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Altimit
Člen | 82
+
0
-

Ahoj mám problém, potřeboval bych poradit s váženým průměrem načteným z databáze..
Jedná se o tento příklad:
http://screens.altisek.eu/…reenshot.png
kdy w se spodním indexem je váha známky a x se spodním indexem je daná známka (indexy jsou k dané známce daná váha) – tento systém počítá průměr program bakalář..
DB se známkami vypadá takhle:
http://screens.altisek.eu/…reenshot.png

kdy user_id a school_id je filtrovaná z sessionu a subject_zkratka z odkazu který vypadá tak: web/trida/znamky/<predmet>

Potřeboval bych jak to udělat, aby to nějak fungovalo

Děkuji za pomoc.

Dělám menší web o školním projektu, který běží na nette (rozvrh hodin na sudy a lichý týden) a učitelka z matematiky nám chce hodit známky někde, ale systém bakaláři vypovídají službu..

CZechBoY
Člen | 3608
+
0
-

S kterou casti si konkretne nevis rady?
Ve zkratce si vyberes radky z db ktery te zajimaji a potom vynasobis podle vzorce.

Mysteria
Člen | 797
+
0
-

Za sebe bych jako první určitě vyzkoušel tohle, ale je potřeba to otestovat, jestli to opravdu vrací správné výsledky.

SELECT SUM(grade * value) / SUM(value) FROM grades WHERE user_id = ? AND subject_zkratka = ?;
Altimit
Člen | 82
+
+1
-

Děkuji :)
nakonec jsem to vyřešil takhle:

$znamka = $this->database->table('grades')->where('user_id = ? AND school_id = ? AND subject_zkratka = ?', $this->user->getId(), $this->user->getIdentity()->schools_id, $predmet)->sum('grade * value');
        $hodnota = $this->database->table('grades')->where('user_id = ? AND school_id = ? AND subject_zkratka = ?', $this->user->getId(), $this->user->getIdentity()->schools_id, $predmet)->sum('value');
        prumer = round($znamka/$hodnota, 2);

kdy $znamka vezme součet obou hodnot něco jako vzorec (znamka * hodnota)+ (…)
a $hodnota sečte sloupec value
poslední co to vydělí a vypočítá průměr je tento:

prumer = round($znamka/$hodnota, 2);

a vezme ho rovnou na 2 desetinná místa.

Děkuji :)