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 中部分数据的平均值的主要内容,如果未能解决你的问题,请参考以下文章

数据查询 sql sever 2005

SQL查询出平均分大于80分,且至少两门课大于90的学生。

T-SQL 中的加权平均值(如 Excel 的 SUMPRODUCT)

1查询成绩表的总分数,平均分,最低分和最高分。用sql语句怎么写

sql计算机系的平均成绩为多少?

如何用SQL语句得到简单的移动平均值?