【问题标题】:Average and case in SQL Server 2012SQL Server 2012 中的平均值和大小写
【发布时间】:2015-01-10 08:28:27
【问题描述】:

我想在大于零时获得一列的平均值。

Select Avg(Case when Column > 0 then Column else 0 end) as Avg

但恐怕else 子句不正确。我想忽略平均值中的零值。

【问题讨论】:

    标签: sql sql-server case average


    【解决方案1】:

    case statement 中删除else 部分,因此小于1 的值将是NULL

    Null 值将被Avg aggregate 消除。因此,您将获得大于0 的值的平均值。试试这个。

    Select Avg(Case when [Column]>0 then [Column] end) as [Avg]
    

    演示

    没有else 参与case statement(预期平均值)

    SELECT Avg(CASE WHEN a > 0 THEN a END) [Avg]
    FROM   (SELECT 2 a UNION ALL SELECT 2 UNION ALL SELECT -1) bb
    

    结果:2

    else 加入case statement

    SELECT Avg(CASE WHEN a > 0 THEN a ELSE 0 END) [Avg]
    FROM   (SELECT 2 a UNION ALL SELECT 2 UNION ALL SELECT -1) bb 
    

    结果:1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多