Sql 如何在Teradata中按秩(而不是行)计算滚动平均值?
我在Teradata中有下表:Sql 如何在Teradata中按秩(而不是行)计算滚动平均值?,sql,average,teradata,ansi-sql,rolling-average,Sql,Average,Teradata,Ansi Sql,Rolling Average,我在Teradata中有下表: ranked | data_val -------- ---------- 1 | 100 2 | 30 2 | 20 2 | 70 我想要下表,其中avg_val是按排名值升序排列的数据值的滚动平均值: 我尝试使用: SELECT ranked , AVERAGE(data)val) OVER ( PARTITION BY NULL ORDER BY ranked
ranked | data_val
-------- ----------
1 | 100
2 | 30
2 | 20
2 | 70
我想要下表,其中avg_val是按排名值升序排列的数据值的滚动平均值:
我尝试使用:
SELECT
ranked
, AVERAGE(data)val) OVER (
PARTITION BY NULL
ORDER BY ranked ASC
ROWS UNBOUNDED PRECEDING
) AS avg_val
FROM tbl
;
但我明白了:
ranked | avg_val
------ ---------
1 | 100
2 | 65
2 | 50
2 | 55
这不是我想要的
如何返回所需的输出?如何使用窗口函数进行聚合
select ranked,
(sum(sum(data_val)) over (order by ranked rows between unbounded preceding and current row) /
sum(count(*)) over (order by ranked rows between unbounded preceding and current row)
)
from t
group by ranked;
需要一个无边界的行,但它可以工作。从tbl group by ranked中选择ranked,sumsumdata_val over order by ranked ROWS UNBOUNDED Previous/sumcount*over order by ranked ROWS UNBOUNDED Previous from tbl group by ranked@萨姆。啊。Teradata还没有解决这个问题。我加了开窗条款,不用担心。我还没有足够的堆栈溢出声誉来显示upvote,但是请放心,您已经被upvote了。不默认为RANGE UNBONDED PREVICE是有历史原因的,并且RANGE在Teradata中不受支持,但无论如何建议使用explixit ROWS UNBONDED PREVICE,因为对于非唯一订单,可能会有更好的性能和潜在的意外结果by@dnoeth . . . 哦默认值应为range,但Teradata不支持该值。因此,它需要windowing子句来表示rows构造。这实际上是有道理的。
select ranked,
(sum(sum(data_val)) over (order by ranked rows between unbounded preceding and current row) /
sum(count(*)) over (order by ranked rows between unbounded preceding and current row)
)
from t
group by ranked;