计算不为零的多列 SQL

Count multiple column without zero SQL

我想要得到以下结果:

--------------------------------------------------------
V1     V2     V3     Result
--------------------------------------------------------
5      10     15     10
4      0      10     7
2      2      0      2

我的table:

--------------------
V1     V2     V3     
--------------------
5      10     15     
4      0      10     
2      2      0      

我想做的是,对V1、V2、V3 的列进行平均,但不对零值进行平均。如果我使用excel,公式应该是:

=(V1 + V2 + V3) / COUNTIF(V1, V2, V3, "<>0")

有人知道怎么做吗?
谢谢。

一种方法是使用 CASE WHEN

(V1 + V2 + V3) /
((CASE WHEN V1 <> 0 THEN 1 ELSE 0 END) +
(CASE WHEN V2 <> 0 THEN 1 ELSE 0 END) +
etc.))

但是执行此操作的方式可能不那么冗长。

列之和除以符号之和。补偿零除法。

SELECT 
  (v1+v2+v3) / nullif(sign(v1) + sign(v2) + sign(v3), 0)