sql >> Base de Datos >  >> RDS >> Mysql

Promedio en un conteo () en la misma consulta

Esta es la consulta que está ejecutando, escrita en una sintaxis un poco menos obtusa.

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;

Está uniendo de forma cruzada la tabla, formando (6x6=) 36 filas en total y reduciéndolas a 4, pero debido a que el recuento total es 36, el resultado es incorrecto.
Es por eso que nunca debe usar uniones implícitas.

Vuelva a escribir la consulta a:

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

Si desea el recuento de filas individuales y el promedio en la parte inferior hacer:

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