使AVG()忽略0?

Omn*_*Owl 2 sql sql-server average sql-server-2012

我有一列可以得到0值的列,但是我需要计算该列的平均值而不将那些0计为除法器的一部分。

我有以下查询:

SELECT AVG(CAST(RATING AS NUMERIC(18, 2))) AS AVERAGE,
       QUESTIONID,
       Questions.SHORTVERSION,
       COUNT(CASE
                 WHEN RATING > 0
                 THEN 1
                 ELSE NULL
             END) AS COUNT
FROM AnswersRating
     INNER JOIN Questions ON Questions.ID = QUESTIONID
WHERE SURVEYID IN
(
    SELECT ID
    FROM SURVEYS
    WHERE FLIGHTDATAID = '8371'
)
GROUP BY QUESTIONID,
         Questions.SHORTVERSION
ORDER BY QUESTIONID;
Run Code Online (Sandbox Code Playgroud)

我在某处阅读了可以NULLIF用来帮助实现此目标的信息,但无法弄清楚如何正确使用它。有人可以帮助我吗?

小智 5

您可以使用NULLIF将0转换为NULL,因为AVG会忽略NULL:

NULLIF(RATING, 0) 
Run Code Online (Sandbox Code Playgroud)