sql >> Databáze >  >> RDS >> Mysql

Průměr na count() ve stejném dotazu

Toto je dotaz, který provádíte, napsaný v trochu méně tupé syntaxi.

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;

Spojujete tabulku křížově, vytváříte (6x6=) celkem 36 řádků a zhušťujete to na 4, ale protože celkový počet je 36, výsledek je špatný.
To je důvod, proč byste nikdy neměli používat implicitní spojení.

Přepište dotaz na:

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

Pokud chcete počet jednotlivých řádků a průměr dole:

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. Ukládání srbských latinských znaků do databáze

  2. Chcete omezit hodnotu pole MySQL na určitý rozsah (desítkové hodnoty)

  3. Jak vybrat odlišné řádky bez použití skupiny po příkazu

  4. Jak odečíst 30 dní od aktuálního data a času v mysql?