SQL 求和的平均值

SQL AVG of a SUM

我想获得计算出的 sumaverage。我尝试了 this Whosebug answer 的语法,所以我的 SQL 查询如下所示:

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。 table 背后的想法是每天保存每种产品的库存和库存价值。所以这个特定查询是为了显示它有数据的每一年的平均股票价值。

编辑: 示例输出数据

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 股票价值的平均值。所以第 X 天所有股票价值的总和与 X

的平均值

至少您在外部查询中缺少 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')

我认为您需要按日期对内部查询进行分组,并按年份对外部查询进行分组以获得您想要的结果:

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);