多列的平均值

Pet*_*ter 25 sql t-sql sql-server-2005 sql-server-2008

我有一个名为Request的表,数据看起来像:

Req_ID    R1   R2   R3   R4   R5

R12673    2    5    3    7    10
R34721    3    5    2    1    8
R27835    1    3    8    5    6
Run Code Online (Sandbox Code Playgroud)

现在我想显示R1,R2,R3,R4和R5的平均值

所以我写了一个像这样的查询:

Select Req_ID, Avg(R1+R2+R3+R4+R5) as Average
from Request
Group by Req_ID
Run Code Online (Sandbox Code Playgroud)

但我得到R1,R2,R3,R4和R5的总和不是平均值?我在哪里做错了.

Mar*_*ith 35

您没有提到列是否可以为空.如果它们是,并且您想要AVG聚合提供的相同语义(2008)

SELECT *,
       (SELECT AVG(c)
        FROM   (VALUES(R1),
                      (R2),
                      (R3),
                      (R4),
                      (R5)) T (c)) AS [Average]
FROM   Request  
Run Code Online (Sandbox Code Playgroud)

2005版本有点单调乏味

SELECT *,
       (SELECT AVG(c)
        FROM   (SELECT R1
                UNION ALL
                SELECT R2
                UNION ALL
                SELECT R3
                UNION ALL
                SELECT R4
                UNION ALL
                SELECT R5) T (c)) AS [Average]
FROM   Request
Run Code Online (Sandbox Code Playgroud)

  • @AlokShenoy T 是派生表的别名, c 是其单列的别名。 (4认同)
  • Martin Smith - 请您解释一下您提供的解决方案中```T (c)``` 的重要性吗? (2认同)

Aar*_*and 15

如果数据存储为INT,您可能想尝试

Average = (R1 + R2 + R3 + R4 + R5) / 5.0
Run Code Online (Sandbox Code Playgroud)

  • 请记住,`NULL`值可能是个问题.检查@ martin-smith解决方案 (5认同)