Mysql
 sql >> база данни >  >> RDS >> Mysql

Средно за count() в същата заявка

Това е заявката, която изпълнявате, написана в малко по-малко тъп синтаксис.

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;

Свързвате кръстосано таблицата, правите (6x6=) общо 36 реда и ги сгъстявате до 4, но тъй като общият брой е 36, резултатът е грешен.
Ето защо никога не трябва да използвате неявни присъединявания.

Пренапишете заявката на:

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

Ако искате отделния брой реди средната стойност в долната част прави:

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. Списъкът SELECT не е в клауза GROUP BY и съдържа неагрегирана колона .... несъвместима с sql_mode=only_full_group_by

  2. MySQL обобщени таблици - редове към колони. Запитване

  3. Ако има начин да се присъединя вътрешно MS Sql таблица към MySql таблица в една заявка, използвайки MySql?

  4. Как да получа първия ден от всеки съответен месец в mysql?

  5. Сървърът срещна вътрешна грешка или неправилна конфигурация и не можа да изпълни заявката ви