首頁 > 資料庫 > mysql教程 > 如何在SQL Server中正確計算多列NULL值的平均值?

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

DDD
發布: 2024-12-27 04:08:10
原創
827 人瀏覽過

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板