多列的平均值
計算表中多列的平均值時,正確處理可空性至關重要。考慮以下情況:
問題:
您有一個名為「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中文網其他相關文章!