Mysql
 sql >> Base de données >  >> RDS >> Mysql

Moyenne sur un count() dans la même requête

Il s'agit de la requête que vous exécutez, écrite dans une syntaxe légèrement moins obtuse.

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;

Vous effectuez une jonction croisée de la table, ce qui fait (6x6=) 36 lignes au total et le condense à 4, mais comme le nombre total est de 36, le résultat est erroné.
C'est pourquoi vous ne devez jamais utiliser de jointures implicites.

Réécrivez la requête en :

SELECT AVG(a.rcount) FROM 
  (select count(*) as rcount 
   FROM ressursertiloppgave r
   GROUP BY r.ModulID) a

Si vous voulez le nombre de lignes individuel et la moyenne en bas faire :

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