Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Średnia na count() w tym samym zapytaniu

To jest zapytanie, które wykonujesz, napisane w nieco mniej rozwartej składni.

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;

Łączysz krzyżowo ze stołem, tworząc (6x6=) w sumie 36 wierszy i skracając je do 4, ale ponieważ łączna liczba wynosi 36, wynik jest błędny.
Dlatego nigdy nie powinieneś używać niejawnych złączeń.

Przepisz zapytanie do:

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

Jeśli chcesz indywidualnego licznika wierszy i średnia na dole robi:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zmienić nazwę schematu MySQL?

  2. Jak połączyć się z MySQL za pomocą PHP

  3. Wyciek pamięci Java MySQL JDBC

  4. Grupowanie według kolumny z zależnością od innej kolumny

  5. grupa zliczania mysql przez posiadanie