SQL 求和的平均值
SQL AVG of a SUM
我想获得计算出的 sum
的 average
。我尝试了 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);
我想获得计算出的 sum
的 average
。我尝试了 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);