我有类似股票数据的数据,每小时更新一次。因此,每只股票每天有24条条目。(仅以股票为例)。但有时,数据可能不会被更新。
例如,假设我们有3只股票,A,B,C,并假设我们在一天中为每只股票收集不同的数据。数据看起来会像这样..。
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'))
SELECT SUM(AVG(stock_price)) FROM table WHERE date = [mydate] AND stock_name IN () ('".implode("','", $stocks)."') GROUP BY stock_name但那不管用。有人能提供一些洞察力吗?
谢谢,提前。
发布于 2014-04-03 04:08:39
在子查询中计算每个股票的平均值,然后在主查询中将它们加在一起.
SELECT SUM(average_price) AS total_averages
FROM (SELECT AVG(price) AS average_price)
FROM table
WHERE <conditions>
GROUP BY stock_name) AS averages发布于 2014-04-03 04:16:52
一种方法是使用内联视图作为行源:
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)称为“派生表”。
外部查询实际上如下所示:
SELECT SUM(a.avg_stock_price) AS sum_avg_stock_price
FROM a“诀窍”是,"a"不是一个正则表,它是由查询返回的一组行;但根据关系代数理论,它的工作原理是相同的.是一组或几行。如果a是一个常规表,我们可以编写:
SELECT b.col
FROM (
SELECT col FROM a
) b我们不想在没有必要的情况下在MySQL中这样做,因为MySQL处理这个过程的方式效率很低。MySQL首先运行内部查询(内联视图中的查询)。MySQL创建一个临时MyISAM表,并将查询返回的行插入临时MyISAM表。然后,MySQL对临时表( MySQL将其称为“派生表”)运行外部查询,以返回结果。创建和填充一个临时表,这是一个常规表的副本,这是一种很大的开销,特别是使用大集合。
使这种功能强大的是内联视图查询可以包括联接、WHERE子句、聚合、GROUP等等。只要它返回一组行(具有适当的列名),我们就可以将查询包装为parens,并在另一个查询中引用它,就像引用表一样。
https://stackoverflow.com/questions/22827606
复制相似问题