假设有一个表demoa
,其中包含以下数据:
date a b c
2017-05-22 1 6 10
2017-05-23 2 7 11
2017-05-24 3 8 12
2017-05-25 4 9 null
2017-05-26 5 null null
2017-05-27 null null null
Run Code Online (Sandbox Code Playgroud)
我想null
用其相应列的平均值替换这些值:
date a b c
2017-05-22 1 6 10
2017-05-23 2 7 11
2017-05-24 3 8 12
2017-05-25 4 9 11
2017-05-26 5 7.5 11
2017-05-27 3 7.5 11
Run Code Online (Sandbox Code Playgroud)
我尝试nvl
使用avg()
,但这需要group by
每一列并且无法删除null
值:
select
date,
nvl(a,avg(a)),
nvl(b,avg(b)),
nvl(c,avg(c))
from damoa
group by date,a,b,c;
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。
Windows 功能 -
avg(...) over ()
select dt
,coalesce (a,avg(a) over ()) as a
,coalesce (b,avg(b) over ()) as b
,coalesce (c,avg(c) over ()) as c
from demoa
Run Code Online (Sandbox Code Playgroud)
+------------+-----+-----+------+
| dt | a | b | c |
+------------+-----+-----+------+
| 2017-05-22 | 1.0 | 6.0 | 10.0 |
| 2017-05-23 | 2.0 | 7.0 | 11.0 |
| 2017-05-24 | 3.0 | 8.0 | 12.0 |
| 2017-05-25 | 4.0 | 9.0 | 11.0 |
| 2017-05-26 | 5.0 | 7.5 | 11.0 |
| 2017-05-27 | 3.0 | 7.5 | 11.0 |
+------------+-----+-----+------+
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5518 次 |
最近记录: |