多列的平均值
计算表中多列的平均值时,正确处理可空性至关重要。考虑以下情况:
问题:
您有一个名为“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中文网其他相关文章!