mysql 对同一查询中的计数()求平均值

t9eec4r0  于 5个月前  发布在  Mysql
关注(0)|答案(3)|浏览(57)

我目前正在做一个作业,要求我找到每个模块的资源数量的平均值。当前表格如下所示:

ResourceID   ModulID
   1            1
   2            7
   3            2
   4            4
   5            1
   6            1

字符串
所以基本上,我试图找出如何获得平均资源数。这里唯一相关的测试数据是模块1,它有3个不同的资源连接到它。但我需要显示所有的结果。
这是我的代码:

select avg(a.ress) GjSnitt, modulID
from 
(select count(ressursID) as ress 
 from ressursertiloppgave
 group by modulID) as a, ressursertiloppgave r
group by modulID;


很明显,这是行不通的,但我目前在亏损什么改变在这一点上。我真的很感激任何输入你们有。

carvr3hs

carvr3hs1#

这是您正在执行的查询,它是用稍微不那么迟钝的语法编写的。

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

ycl3bljg

ycl3bljg2#

我有办法了
SELECT AVG(counter)FROM(SELECT AVG(column to count)AS counter FROM table)AS counter
请注意,昵称{counter}已添加到SELECT语句中,并添加到内部SELECT语句的末尾

iaqfqrcu

iaqfqrcu3#

你也可以将值的个数(7)除以 distinct 值的个数(4):

SELECT count(*) / count(DISTINCT ResourceID)  
FROM   resurrectfromgrave

字符串

相关问题