【问题标题】:How do I calculate the average when the numbers are grouped数字分组时如何计算平均值
【发布时间】:2016-07-07 12:08:04
【问题描述】:

我正在(在 Rails 中)构建一个应用程序来抓取 NBA 数据(主要用于我自己的教育和学习工具)。我从头开始使用 postgresql,因为如果我要使用它来托管它会更有意义。数据库模式的设置完全符合我的要求here

参与者实例基于 TEAM 概念 统计实例基于 PLAYER 概念,因此许多统计实例构成了参与者的“总数”。

以下查询:

Select SUM(steals) from statistics
INNER JOIN participants on statistics.participant_id = participants.id
INNER JOIN teams on participants.team_id = teams.id 
WHERE teams.id = 15 
GROUP BY statistics.participant_id;

产量(在 psql 终端应用程序中)

 sum 
-----
   8
   7
   5
   7
   6
   7
  10
   6
   7
   6
   7
   5
   9
  11
   4
   7
   8

如何编写sql查询来根据这17行计算平均值

(编辑以简化查询,只问一个问题)

【问题讨论】:

  • @MageeWorld 你已经接近做你想做的事了。试试看Aggrigate functions 就像AVG() 一样。
  • 使用子选择:SELECT ... FROM (SELECT ... GROUP BY ...) s GROUP BY ...
  • @CoderofCode 我确实知道聚合函数(尽管我的大部分经验都是在 mysql 中),但我不知道如何将聚合查询包装在平均查询中
  • @MageeWorld - 是的,SUM 是一个聚合函数。它只是意味着它被应用在不止一行上。

标签: sql postgresql


【解决方案1】:

使用以下查询来包装您的查询

SELECT sum, AVG(sum)
FROM (
  -- your query here
) x

在某些系统上,您还可以使用不需要外部查询的窗口函数。其语法如下所示

AVG(sum) OVER () as avg

由于您要查找的平均值是分组的结果,因此您不能在此处使用它。

【讨论】:

  • 你给我的东西为我指明了正确的方向,尽管为了我的需要 - 这是有效的 Select AVG(sum) FROM (my query) as sum;` ( ps - 我做错了什么还是你不能在编辑中点击“返回”?
  • @MageeWorld SELECT AVG(sum) AS sum FROM ( stuff); 是更标准的写法——但看起来还不错。
猜你喜欢
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
相关资源
最近更新 更多