Dies ist die Abfrage, die Sie ausführen, geschrieben in einer etwas weniger stumpfen Syntax.
SELECT
avg(a.ress) as GjSnitt
, modulID
FROM
(SELECT COUNT(ressursID) as ress
FROM ressursertiloppgave
GROUP BY modulID) as a
CROSS JOIN ressursertiloppgave r <--- Cross join are very very rare!
GROUP BY modulID;
Sie verknüpfen die Tabelle über Kreuz, erstellen (6x6=) insgesamt 36 Zeilen und verdichten diese auf 4, aber da die Gesamtzahl 36 beträgt, ist das Ergebnis falsch.
Deshalb sollten Sie niemals implizite Joins verwenden.
Schreiben Sie die Abfrage um in:
SELECT AVG(a.rcount) FROM
(select count(*) as rcount
FROM ressursertiloppgave r
GROUP BY r.ModulID) a
Wenn Sie die individuelle Zeilenanzahl und möchten der Durchschnitt ganz unten macht:
SELECT r1.ModulID, count(*) as rcount
FROM ressursertiloppgave r1
GROUP BY r1.ModulID
UNION ALL
SELECT 'avg = ', AVG(a.rcount) FROM
(select count(*) as rcount
FROM ressursertiloppgave r2
GROUP BY r2.ModulID) a