如何通过 SQL 查询找到组结果的平均值?

Posted

技术标签:

【中文标题】如何通过 SQL 查询找到组结果的平均值?【英文标题】:How do I find the average of the result of a group by SQL query? 【发布时间】:2021-05-03 02:24:18 【问题描述】:

所以假设我从一个名为 Inventory 的表开始,如下所示,其中每个非唯一存储 ID 有多个唯一项目:

ItemID StorageID
453 100
234 100
642 150
234 200
343 200
143 200

我根据其存储 ID 对项目进行分组,因此它会产生下表 - (select itemID, storageID from Inventory group by storageID)

ItemID StorageID
453, 234 100
642 150
234, 343, 143 200

但这是我坚持的部分:我想返回一个数字结果,表示每个存储的平均项目数。因此,这将涉及计算每个不同存储的项目数(即: storageID 100 有 2 个项目, storageID 200 有 3 个项目),然后找到平均值。因此,在我分享的示例中,平均值为 (2+1+3)/3 = 2.67 件/存储。 我怎么能查询mysql呢?我什至需要使用 group by 作为开始吗?

【问题讨论】:

【参考方案1】:

您不需要子查询:

select count(*) / count(distinct storageID) as avg_per_storageID
from Inventory ;

平均值是项目总数除以storageIDs 的数量。

【讨论】:

【参考方案2】:

你可以使用group by如下:

select avg(cnt) as average_
(select count(*) as cnt
  from your_table t
 group by storageid) t

【讨论】:

【参考方案3】:

对您的数据进行分组并在每个组上使用count()

select avg(cnt)
from
(
  select count(*) as cnt, storageID 
  from Inventory 
  group by storageID
) tmp

【讨论】:

以上是关于如何通过 SQL 查询找到组结果的平均值?的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句对返回的结果集里的字段再进行条件查询,在一个结果集显示

如何找到平均时间? SQL 服务器 2017

如何在全范围内平均减少 SQL 查询的结果行?

如何在 Spark SQL 中找到分组向量列的平均值?

如何找到一组轴承的平均值[重复]

sql: 练习题 25查询每门课程的平均成绩,结果按平均成绩降序排列