Sql 对合并值使用滚动平均值

Sql 对合并值使用滚动平均值,sql,average,teradata,coalesce,rolling-computation,Sql,Average,Teradata,Coalesce,Rolling Computation,我无法使计算列显示平均值。请参阅: Cast(AVG(COALESCE(mnth1.HandledCalls,0)+COALESCE(mnth2.HandledCalls,0)+COALESCE(mnth3.HandledCalls,0)) as Decimal(8,2)) as Avg_Handled, 我如何使这个节目平均3列?有时,mnth2和mnth3可能无法填充。我试图用计数除以合并月份,以防任何月份在任何给定时间都为空。我收到一个错误,说选择列表无效。有什么建议吗?像这样

我无法使计算列显示平均值。请参阅:

    Cast(AVG(COALESCE(mnth1.HandledCalls,0)+COALESCE(mnth2.HandledCalls,0)+COALESCE(mnth3.HandledCalls,0)) as Decimal(8,2))  as Avg_Handled,
我如何使这个节目平均3列?有时,mnth2和mnth3可能无法填充。我试图用计数除以合并月份,以防任何月份在任何给定时间都为空。我收到一个错误,说选择列表无效。有什么建议吗?

像这样的建议

cast(
    sum(
        coalesce(mnth1.HandledCalls, 0) +
        coalesce(mnth2.HandledCalls, 0) +
        coalesce(mnth3.HandledCalls, 0)
    )
as decimal(29, 10)) /
(
    count(mnth1.HandledCalls) +
    count(mnth2.HandledCalls) +
    count(mnth3.HandledCalls)
)

你可以这样做

Cast(
     AVG((SELECT COALESCE(mnth1.HandledCalls,0) 
          UNION ALL SELECT COALESCE(mnth2.HandledCalls,0) 
          UNION ALL SELECT COALESCE(mnth3.HandledCalls,0) )) 
     AS  Decimal(8,2))  as Avg_Handled

您是否尝试过以下方法:

SELECT CAST(AVG(ZEROIFNULL(mnth1.HandledCalls) 
     + ZEROIFNULL(mnth2.HandledCalls) 
     + ZEROIFNULL(mnth3.HandledCalls) as Decimal(8,2))  as Avg_Handled
FROM ....

默认情况下,Teradata中的聚合函数会忽略空值。

您可以将表结构添加到问题中吗?当计算一个平均值时,其中一列为空值,您希望将空值视为零,还是只希望其他两列的平均值?表结构仅选择mnth1、mnth2,mnth 3和该值是每个可用值的平均值。我使用的是teradata 12。当null时,我想将其视为不存在(也就是其他两列的平均值),它看起来很简单…我回到办公桌时会进行测试。谢谢你的回复。事实上我不知道它在Teradata是否有效,但你可以试试