首页 > 数据库 > mysql教程 > 如何在SQL Server中正确计算多列NULL值的平均值?

如何在SQL Server中正确计算多列NULL值的平均值?

DDD
发布: 2024-12-27 04:08:10
原创
829 人浏览过

How to Correctly Calculate the Average of Multiple Columns with NULL Values in SQL Server?

多列的平均值

计算表中多列的平均值时,正确处理可空性至关重要。考虑以下情况:

问题:

您有一个名为“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
登录后复制

您想要显示 R1、R2、R3、R4 和 R5 列的平均值。但是,当您使用以下查询时:

Select Req_ID, Avg(R1+R2+R3+R4+R5) as Average
from Request
Group by Req_ID
登录后复制

您得到的是值的总和而不是平均值。

解决方案:

问题在于 NULL 值的处理。如果您的列允许 NULL,则 NULL 的总和也为 NULL。要正确计算平均值,您需要忽略 NULL。

Post-2008 语法:

如果您使用的是 SQL Server 2008 或更高版本,则可以使用以下语法:

SELECT *,
       (SELECT AVG(c)
        FROM   (VALUES(R1),
                      (R2),
                      (R3),
                      (R4),
                      (R5)) T (c)) AS [Average]
FROM   Request
登录后复制

此语法使用 VALUES 子句构造一个包含一行的表每列。然后,AVG 聚合将应用于此表,忽略包含 NULL 值的任何行。

2008 之前的语法:

如果您使用的是 SQL Server 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
登录后复制

此语法使用 UNION ALL 来创建每列一行的表格。然后将 AVG 聚合应用于此表,忽略任何包含 NULL 值的行。

以上是如何在SQL Server中正确计算多列NULL值的平均值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板