行的平均值Mysql忽略零值

时间:2014-08-05 10:09:26

标签: mysql

你好我的avg功能有问题。我有一张这样的桌子,我想取每行的平均值。我在某些单元格中也有零,并且想避免计算它们。

data    rep     val1    val2    val3
1       a       0       3       3      
2       a       1       4       0
3       a       1       1       1
4       a       1       3       0

我想要这个结果

data    AVG
1       3
2       2.5
3       1
4       2

谢谢

1 个答案:

答案 0 :(得分:1)

假设您至少有一个非零值:

SELECT data, (val1+val2+val3)/((val1!=0) + (val2!=0) + (val3!=0)) avg
  FROM **table_name**

我认为除以零返回null请参阅manual,具体取决于您的数据库设置,因此您可以这样做:

SELECT data, COALESCE((val1+val2+val3)/((val1!=0) + (val2!=0) + (val3!=0)),0) avg
  FROM **table_name**

一行中的任何null值都会导致每个查询始终分别为该行返回null0