【问题标题】:Using a rolling average on coalesced values对合并值使用滚动平均值
【发布时间】:2013-08-25 15:01:57
【问题描述】:

我无法让计算列显示平均值。请看:

    Cast(AVG(COALESCE(mnth1.HandledCalls,0)+COALESCE(mnth2.HandledCalls,0)+COALESCE(mnth3.HandledCalls,0)) as Decimal(8,2))  as Avg_Handled,

如何使这个显示平均 3 列?有时,可能不会填充 mnth2 和 mnth3。我试图将合并的月份除以计数,以防任何给定时间为空。我收到一条错误消息,提示选择列表无效。有什么建议吗?

【问题讨论】:

  • 你可以在你的问题中添加表格结构吗?
  • 在计算其中一列为 NULL 的 AVG 时,您希望将 NULL 视为零,还是只希望其他两列的平均值?
  • 表结构只选择了mnth1、mnth2、mnth 3和每个可用值的平均值。我正在使用 teradata 12。当为 null 时,我想将其视为不存在(也就是其他 2 列的平均值)

标签: sql average teradata coalesce rolling-computation


【解决方案1】:

这样的?

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)
)

【讨论】:

  • 看起来很...简单...我会在我回到办公桌前进行测试。感谢您的回复。
  • 其实不知道Teradata能不能用,你可以试试
【解决方案2】:

你可以做类似的事情

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

【讨论】:

    【解决方案3】:

    您是否尝试过以下方法:

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

    Teradata 中的聚合函数默认忽略 NULL 值。

    【讨论】:

      猜你喜欢
      • 2014-11-29
      • 2021-06-04
      • 2018-11-20
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      相关资源
      最近更新 更多