sql >> Database >  >> RDS >> Mysql

Gemiddelde op een telling() in dezelfde zoekopdracht

Dit is de query die u uitvoert, geschreven in een iets minder stompe syntaxis.

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;

Je maakt een cross-join aan de tafel, maakt in totaal (6x6=) 36 rijen en brengt dit terug naar 4, maar omdat het totaal 36 is, is de uitkomst verkeerd.
Dit is waarom je nooit impliciete joins moet gebruiken.

Herschrijf de vraag naar:

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

Als u het individuele aantal rijen en . wilt het gemiddelde onderaan doe:

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. Ondersteunt MySQL historische datum (zoals 1200)?

  2. TAAL MAKEN plpython3u – PostgreSQL 9.6

  3. Sqlalchemy bulk-update in MySQL werkt erg traag

  4. Snelheidsovertredingen (bulk) invoegen in MySQL met Python