Ik gebruik deze tabel:

Nu wil ik dat ie het gemiddelde uitrekend van die cijfers..
dus dat die die 10 drie keer opteld
Die 7 twee keer opteld en die 5 gewoon 1 keer..
en dan deelt door het de rij aantal (bij elkaar opgeteld 6)
Weet iemand een script??
Je hebt het niet helemaal slim aangepakt. Wat je beter had kunnen doen is voor elk cijfer een apart record aanmaken. Dus je krijgt dan bijvoorbeeld een tabel met de volgende structuur:

cijfers
-------
id
vak_id
leerling_id
cijfer

Vervolgens kun je met de functie AVG() het gemiddelde cijfer per vak uitrekenen met bijvoorbeeld deze query:

SELECT
    vak_id,
    AVG(cijfer) AS gemiddelde
FROM
    cijfers
GROUP BY
    vak_id


Met het datamodel dat je nu gebruik is dit een heel stuk lastiger en waarschijnlijk komt het erop neer dat je eerst de gegevens moet ophalen en vervolgens met php het gemiddelde moet berekenen.
Okey maar.... maar hij moet dan ook uitreken hoevaak het meeteld tog.. want sommige cijfers tellen 3x mee..
dan moet ik dus de tabel maken:
cijfer
------
id
vak_id
cijfer
aantal

(leerling_id hoeft niet want heti s voor mijn eige privé gebruik)
SELECT
vak_id,
SUM(punten) AS totaal,
SUM(aantal) AS aantal_tot,
SUM(punten)/SUM(aantal) AS gemiddelde
FROM
cijfers
GROUP BY
vak_id
Bedoel je dat cijfers onderling nog een verschillende weging kunnen hebben?
ja dat bedoel ik ja...
Dat is ook vrij eenvoudig op te lossen. Stel je hebt de volgende tabel:

cijfers
--------
id
vak_id
cijfer
weging

Met deze query haal je dan het gemiddelde per vak op, waarbij de weging in acht genomen wordt:

SELECT
    vak_id,
    (SUM(cijfer * weging) / SUM(weging)) AS gemiddelde
FROM
    cijfers
GROUP BY
    vak_id
Hartelijk dank het werkt :)
Nu heb ik nog een vraagje... is er ook een script dat ie maar 1 cijfer achter de komma pakt?
Dat zou je kunnen doen door ROUND() te gebruiken. Zie de mysql handleiding voor een voorbeeldje:

Misschien offtopic, maar:
Ben je van plan om voor elk vak een table aan te maken.
Dit kan makkelijker en doeltreffender. Je gebruikt dan slecht 2 tabellen.


-- vakken
vak_id INT(2) auto_increment
vak_naam varchar(30)

-- vak_cijfers
cijfer DECIMAL(4,2)
vak_id INT(2)


Dat is veel makkelijker volgens mij...
Daarnaast zou je eventueel een aparte tabel cijfers kunnen makken en nog een koppel tabel. met cijfer_id en vak_id... Makkelijker om uit tebreiden denk ik.
But this will do the trick!
Een aparte tabel voor de cijfers? Dat lijkt me iets teveel van het goede aangezien je wat cijfers betreft al te maken hebt met decimals. Beetje onlogisch om aan elk cijfer opgedeeld in tienden van een punt een id toe te kennen, en dat vervolgens weer te gebruiken in je koppeltabel.

Nee gebruiker daar liever gewoon 1 tabel voor, en dan nog een aparte voor de vakken natuurlijk. Maar volgens mij stelde ik dat ook al voor in mijn andere posts...

Reageren