首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查询平均值之和?

如何查询平均值之和?
EN

Stack Overflow用户
提问于 2014-04-03 04:00:53
回答 2查看 46关注 0票数 0

我有类似股票数据的数据,每小时更新一次。因此,每只股票每天有24条条目。(仅以股票为例)。但有时,数据可能不会被更新。

例如,假设我们有3只股票,A,B,C,并假设我们在一天中为每只股票收集不同的数据。数据看起来会像这样..。

代码语言:javascript
复制
row   A    B    C
 1    3    4    5
 2    3.5  4.1  5
 3    2.9  3.8  4.3

我想要的是总结这段时间内每只股票的平均值,即Avg(A) + Avg(B) + Avg(C)

在现实中,我有数百个库存和数十万行。我需要这个来计算一天。

我尝试过这样做(股票名在数组中-stock= array('A','B','C'))

代码语言:javascript
复制
SELECT SUM(AVG(stock_price)) FROM table WHERE date = [mydate] AND stock_name IN () ('".implode("','", $stocks)."') GROUP BY stock_name

但那不管用。有人能提供一些洞察力吗?

谢谢,提前。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-03 04:08:39

在子查询中计算每个股票的平均值,然后在主查询中将它们加在一起.

代码语言:javascript
复制
SELECT SUM(average_price) AS total_averages
FROM (SELECT AVG(price) AS average_price)
      FROM table
      WHERE <conditions>
      GROUP BY stock_name) AS averages
票数 2
EN

Stack Overflow用户

发布于 2014-04-03 04:16:52

一种方法是使用内联视图作为行源:

代码语言:javascript
复制
SELECT SUM(a.avg_stock_price) AS sum_avg_stock_price
  FROM ( SELECT AVG(t.stock_price) AS avg_stock_price
           FROM table t
          WHERE t.date = [mydate]
            AND t.stock_name IN ('a','b','c')
          GROUP BY t.stock_name
       ) a

您可以只从内联视图(别名为a)运行查询,以验证其返回的结果。外部查询针对内联视图查询返回的一组行运行。(MySQL将内联视图(别名为a)称为“派生表”。

外部查询实际上如下所示:

代码语言:javascript
复制
SELECT SUM(a.avg_stock_price) AS sum_avg_stock_price
  FROM a

“诀窍”是,"a"不是一个正则表,它是由查询返回的一组行;但根据关系代数理论,它的工作原理是相同的.是一组或几行。如果a是一个常规表,我们可以编写:

代码语言:javascript
复制
SELECT b.col
  FROM (
         SELECT col FROM a
       ) b

我们不想在没有必要的情况下在MySQL中这样做,因为MySQL处理这个过程的方式效率很低。MySQL首先运行内部查询(内联视图中的查询)。MySQL创建一个临时MyISAM表,并将查询返回的行插入临时MyISAM表。然后,MySQL对临时表( MySQL将其称为“派生表”)运行外部查询,以返回结果。创建和填充一个临时表,这是一个常规表的副本,这是一种很大的开销,特别是使用大集合。

使这种功能强大的是内联视图查询可以包括联接、WHERE子句、聚合、GROUP等等。只要它返回一组行(具有适当的列名),我们就可以将查询包装为parens,并在另一个查询中引用它,就像引用表一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22827606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档