2010-11-24 11 views
4

複数の列の平均を選択するにはどうすればよいですか?私は1行で複数の列のAVGを選択する方法

select avg(x, y, z) from tableを試してみました。しかし、それは動作しません私は

AVG 
------------- 
4 
5 
5 
8.66666667 

のようなものを取得したい

X Y Z 
------------- 
6 3 3 
5 5 NULL 
4 5 6 
11 7 8 

は、私のようないくつかのデータを持っていると仮定します。

これを行うクエリに関するアイデアはありますか?

答えて

11

は、あなたがそれらを追加し、値の数で割る

Select  (Coalesce(x,0) + Coalesce(y,0) + Coalesce(z,0))/
     (Coalesce(x/x, 0) + Coalesce(y/y, 0) + Coalesce(z/z, 0)) 

または

Select (Coalesce(x,0) + Coalesce(y,0) + Coalesce(z,0))/
     (Case When x Is Null 0 Else 1 End + 
      Case When y Is Null 0 Else 1 End + 
      Case When z Is Null 0 Else 1 End) 
+1

x/xテクニックは特に滑らかです。 –

+0

アルビート少し鈍い... –

+0

応答のためにありがとう; もう1つ。多分それは異なった質問であるべきです。しかし、ここにはとにかくです。 SQL Server上でこれを行う方がパフォーマンスが向上しますか?またはスクリプト言語を使ってそれを計算するのですか? – Sinan

1

試してみてください。

(x + y + z)/3 
+0

いいえ、OPが望んでいるのは、各レコードの値の平均ですと思うのですが、平均操作の分母からNULLを除外するのはちょっと難しいです。 – FrustratedWithFormsDesigner

+0

おっと、質問に間違いがありました。私の応答がうまくいくもので更新されました - 少し複雑になるNULLがある場合でも... – robbrit

3

を試してみてください。

SELECT (IFNULL(x, 0) + IFNULL(y, 0) + IFNULL(z, 0))/
     (IIF(ISNULL(x), 0, 1) + IIF(ISNULL(y), 0, 1) + IIF(ISNULL(z), 0, 1)) 
    FROM YourTable 
関連する問題