2015-04-28 114 views
-1

我想获得average的计算sum。我从this stackoverflow answer尝试过的语法所以我的SQL查询如下所示:SUM的SQL AVG

SELECT AVG(iq.stockvalue_sum), iq.date 
FROM(
    SELECT CONCAT(DATE_FORMAT(s.date, '%Y'), '-01-01') as date, 
    SUM(GREATEST(s.stockvalue,0)) as stockvalue_sum 
    FROM stockvalues s 
    GROUP BY CONCAT(DATE_FORMAT(s.date, '%Y'), '-01-01') 
) iq 

然而,这是不是给我一个正确的平均值。我想要得到每年平均stockvalue。该表背后的想法是每天保存每种产品的库存和库存价值。因此,此特定查询将显示其数据每年的平均股价。

编辑:样本输出数据

Stockvalue | Year 
_________________ 
- 205  | 2015 
- 300  | 2014 

输入数据:

pid | val | date 
______________________ 
- 1 | 100 | 28-04-2015 
- 2 | 150 | 28-04-2015 
- 1 | 80 | 27-04-2015 
- 2 | 80 | 27-04-2015 
.... 
- 1 | 100 | 29-01-2014 
- 2 | 100 | 29-01-2014 
- 1 | 200 | 30-01-2014 
- 2 | 200 | 30-01-2014 

所以我需要计算知道total stockvalue的平均值。因此,对于X日所有stockvalues之和X

+0

你的外部查询是由缺少一组,但由于逻辑分组列('iq.date')与内部查询相同,没有多大意义,即你的内部查询每年只返回一个结果,所以取这一行的平均值是毫无意义的。因此,我对你的要求有点困惑,或许一些样品数据和预期产量会有所帮助? – GarethD

+0

@GarethD我添加了一些样本数据 – Bram

+0

没有样本输入,样本输出没有帮助。我的观点是,我不明白为什么你需要'SUM',你能不能直接做一个平均值,所以把SUM(GREATEST(s.stockvalue,0))改为'AVG(GREATEST(s) .stockvalue,0))',并完全摆脱外部查询。 – GarethD

回答

1

我认为你需要按日期你内心的查询,并通过一年的外部查询,让您的结果后:

SELECT AVG(s.Stockvalue) AS Stockvalue 
     YEAR(s.Date) AS Date 
FROM ( 
      SELECT DATE(s.Date) AS Date, 
        SUM(GREATEST(s.stockvalue,0)) AS Stockvalue 
      FROM stockvalues AS s 
      GROUP BY DATE(s.Date) 
     ) AS s 
GROUP BY YEAR(s.Date); 
+0

是的,你是对的,我必须按日期分组,然后按年分组。谢谢! – Bram

4

的平均最低你缺少你的外部查询group by

SELECT AVG(iq.stockvalue_sum), iq.date 
FROM(
    SELECT CONCAT(DATE_FORMAT(s.date, '%Y'), '-01-01') as date, 
    SUM(GREATEST(s.stockvalue,0)) as stockvalue_sum 
    FROM stockvalues s 
    GROUP BY CONCAT(DATE_FORMAT(s.date, '%Y'), '-01-01') 
) iq 
GROUP BY iq.date 

然而,鉴于你的内部查询返回一个单一年的总价值,该价值的平均值将是相同的。也许你可以澄清你的意图。你确定你需要内部查询吗?也许这就是你需要的一切?

select avg(GREATEST(stockvalue,0)), CONCAT(DATE_FORMAT(s.date, '%Y'), '-01-01') as date 
from stockvalues 
group by CONCAT(DATE_FORMAT(s.date, '%Y'), '-01-01') 
+0

没有,这是行不通的。我将每个产品的库存量保存到数据库中。所以为了得到当天的平均水平,我需要做一笔所有股票的总和。和平均的。所以要让事情更清楚些。我不需要知道产品的平均股价。但那一天。 – Bram