计算不为零的多列 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)
我想要得到以下结果:
--------------------------------------------------------
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)