mysql - 同一查询中 count() 的平均值

标签 mysql

我目前正在执行一项任务,该任务要求我找出每个模块的资源数量的平均值。当前表格如下所示:

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;

显然它不起作用,但我目前不知道在这一点上要改变什么。我非常感谢你们的任何意见。

最佳答案

这是您正在执行的查询,以稍微不那么晦涩的语法编写。

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

关于mysql - 同一查询中 count() 的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7893631/

相关文章:

mysql在where子句中使用逻辑+组函数的无效使用

python - 在 Python 中使用 MySQL 将数据插入特定行

用于使用 MySql 的 C++ 库

mysql - 当前不支持同一事务内的多个同时连接或具有不同连接字符串的连接

php - SQLSTATE[42S22] : Column not found: 1054 Unknown column in laravel

mysql - 在C中将MySQL连接保留在函数中的静态变量中(避免全局变量)

php - TinyMCE 插入后 MySQL 数据库列未更新

mysql - 返回来自两个不同列的条目的并集

mysql - 调整 RDS 上的默认时区设置

mysql - SQL-从字段唯一的表中获取最新记录