SQL中获取每行三列的平均值

smo*_*smo 7 mysql aggregate

AVG()SQL 中的函数适用于特定的列数据。但在这里,我们要计算每行三个这样的列的平均值。在数学中,我们会做

AVG=(col1 + col2 + col3)/3
Run Code Online (Sandbox Code Playgroud)

同样:是否有任何查询要计算AVG(col1, col2, col3...)

Mar*_*ith 9

如果列不可为空,则只需使用

(col1 + col2 + col3)/3
Run Code Online (Sandbox Code Playgroud)

会正常工作(尽管在某些 RDBMS 上,您可能需要使用非整数分子或除数来避免整数除法)。

对于可为空的列,您可能想要使用类似

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
Run Code Online (Sandbox Code Playgroud)

在 SQL Server 上,您还可以使用

SELECT *,
       (SELECT AVG(Col)
        FROM   (VALUES(Col1),
                      (Col2),
                      (Col3)) V(Col)) AS col_average
FROM   YourTable
Run Code Online (Sandbox Code Playgroud)