web-dev-qa-db-ja.com

SQLで行ごとに3つの列の平均を取得する

SQLのAVG()関数は、特定の列データを処理します。しかし、ここでは、各行についてそのような3つの列の平均を計算します。数学では、

_AVG=(col1 + col2 + col3)/3
_

同様に、AVG(col1, col2, col3...)を計算するクエリはありますか?

7
smo

列がnull入力可能でない場合は、単に

(col1 + col2 + col3)/3

正常に動作します(ただし、一部のRDBMSでは、整数の除算を回避するために、非整数の分子または除数が必要になる場合があります)。

Null許容列の場合は、次のようなものを使用できます

SELECT CASE
         WHEN COALESCE(col1, col2, col3) IS NOT NULL THEN 
         ( COALESCE(col1, 0) + COALESCE(col2, 0) + COALESCE(col3, 0) ) / 
            (CASE WHEN col1 IS NULL THEN 0 ELSE 1 END + 
             CASE WHEN col2 IS NULL THEN 0 ELSE 1 END + 
             CASE WHEN col3 IS NULL THEN 0 ELSE 1 END)
       END

SQL Serverでは、次も使用できます

SELECT *,
       (SELECT AVG(Col)
        FROM   (VALUES(Col1),
                      (Col2),
                      (Col3)) V(Col)) AS col_average
FROM   YourTable
9
Martin Smith