sql >> Databasteknik >  >> RDS >> Mysql

Genomsnitt på en count() i samma fråga

Det här är frågan du kör, skriven i en något mindre trubbig 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;

Du korsansluter tabellen, gör (6x6=) 36 rader totalt och kondenserar ner detta till 4, men eftersom det totala antalet är 36 blir resultatet fel.
Det är därför du aldrig ska använda implicita kopplingar.

Skriv om frågan till:

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

Om du vill ha individuella radantal och genomsnittet i botten gör:

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



  1. Beräkna en löpande summa i SQL Server

  2. kan inte ansluta till mysql med php

  3. php infoga flera rader i MYSQL-databasen

  4. Datariskreducering via datamaskering