SQLのAVG()
関数は、特定の列データを処理します。しかし、ここでは、各行についてそのような3つの列の平均を計算します。数学では、
_AVG=(col1 + col2 + col3)/3
_
同様に、AVG(col1, col2, col3...)
を計算するクエリはありますか?
列が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