SQL 中部分数据的平均值
Posted
技术标签:
【中文标题】SQL 中部分数据的平均值【英文标题】:Average with partial data in SQL 【发布时间】:2018-08-09 01:43:31 【问题描述】:我有如下数据,这是部分数据,缺少几行。考虑到以前的可用值,我需要数据的平均值。我们有任何函数可用于 sql 中的这种平均值吗?
需要的平均值:220
10 天的可用数据:
1st day: 100
4th day: 200
7th day: 300
10th day: 400
将其放入表格格式中:
Rows Date Partial Continuous(needed)
1 01-Aug-18 100 100
2 100
3 100
4 04-Aug-18 200 200
5 200
6 200
7 07-Aug-18 300 300
8 300
9 300
10 10-Aug-18 400 400
-----------------------------------
Average 250 220
-----------------------------------
我正在查看类似 select avg(partial*(nextdate-date))/(lastdate-firstdate) from mytable;
【问题讨论】:
在您的表格中,您的平均值似乎倒退了。 【参考方案1】:使用用户定义的变量来填充缺失值。
SELECT AVG(normal)
FROM (SELECT IFNULL(continuous, @prev) AS normal, @prev := IF(continuous IS NULL, @prev, continuous)
FROM (SELECT continuous
FROM yourTable
ORDER BY id) AS x
CROSS JOIN (SELECT @prev := NULL) AS y
) as z
【讨论】:
【参考方案2】:AVG() 呢?
> SELECT AVG(Normal) FROM table WHERE something;
【讨论】:
我不认为normal
列真的存在,他只是表明他希望缺少值的行继承上一行的值。
啊 - 我想知道 Anu 是否以某种奇怪的方式计算 Average
,因为根据给出的数字,Normal
(和 Continuous
)的平均值是 220,而不是 250。跨度>
@keithpjolley:修复了数据。可能有人编辑它时被打乱了。以上是关于SQL 中部分数据的平均值的主要内容,如果未能解决你的问题,请参考以下文章
T-SQL 中的加权平均值(如 Excel 的 SUMPRODUCT)