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

t9eec4r0  于 2024-01-05  发布在  Mysql
关注(0)|答案(3)|浏览(169)

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

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

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

  1. select avg(a.ress) GjSnitt, modulID
  2. from
  3. (select count(ressursID) as ress
  4. from ressursertiloppgave
  5. group by modulID) as a, ressursertiloppgave r
  6. group by modulID;


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

carvr3hs

carvr3hs1#

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

  1. SELECT
  2. avg(a.ress) as GjSnitt
  3. , modulID
  4. FROM
  5. (SELECT COUNT(ressursID) as ress
  6. FROM ressursertiloppgave
  7. GROUP BY modulID) as a
  8. CROSS JOIN ressursertiloppgave r <--- Cross join are very very rare!
  9. GROUP BY modulID;

字符串
您正在交叉连接表,总共生成(6x6=)36行,并将其压缩为4行,但由于总计数为36,因此结果是错误的。
这就是为什么永远不要使用隐式联接的原因。
将查询重写为:

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


如果你想要单独的行数,底部的平均值是:

  1. SELECT r1.ModulID, count(*) as rcount
  2. FROM ressursertiloppgave r1
  3. GROUP BY r1.ModulID
  4. UNION ALL
  5. SELECT 'avg = ', AVG(a.rcount) FROM
  6. (select count(*) as rcount
  7. FROM ressursertiloppgave r2
  8. 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):

  1. SELECT count(*) / count(DISTINCT ResourceID)
  2. FROM resurrectfromgrave

字符串

相关问题