2011-07-29 4 views
7

数字が10から10までの数字のmysqlデータベースフィールドがあります。AVGを使用すると「0」のエントリが除外されます

私はこれの平均を見つけたいが、その数= 0 すべてのエントリを除くしかし、私もそこにあるどのように多くのエントリがカウントしたいと思います - 数= 0

のものを含みますだから私はちょうど数字を追加することはできません!= 0、それは私のカウントに間違った結果を与えるだろう。

だから私は何かが必要です。

AVG(if(numbers!=0)) AS average 
+0

2つの選択肢が必要です。 – Rufinus

答えて

18

これはいかがですか?

select avg(nullif(field, 0)) from table; 

あなたは、一般的にゼロ値を除外したくない大きなクエリの一部としてこれを使用したい場合には、この方法は、where句を使用することを強制しませんどのように注意してください。また

は、方法によって、avg上記の例では、我々はnull値に0値をオンにするnullifを使用して、null値をスキップします。 nullの値を使用して平均値(たとえば、0が正当な値である場合)を考慮しない値を表す場合は、avg(field)を使用してください。

0
SELECT avg(case 
       when numbers = 0 then null 
       else numbers 
      end) as average, 
     count(*) 
FROM your_table 

avg()にNULL値が使用されていないため、これを行う必要があります。

関連する問題