ホームページ > データベース > 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?

複数列の平均

テーブル内の複数の列の平均を計算する場合、Null 可能性を正しく処理することが重要です。次の状況を考えてみましょう:

問題:

次のデータを含む「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 を無視する必要があります。

2008 以降の構文:

SQL Server 2008 以降を使用している場合は、次を使用できます。次の構文:

SELECT *,
       (SELECT AVG(c)
        FROM   (VALUES(R1),
                      (R2),
                      (R3),
                      (R4),
                      (R5)) T (c)) AS [Average]
FROM   Request
ログイン後にコピー

この構文では、VALUES 句を使用して構築します各列に 1 つの行を含むテーブル。次に、NULL 値を含む行を無視して、AVG 集計がこのテーブルに適用されます。

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 を選択すると、各列に 1 行のテーブルが作成されます。次に、NULL 値を含む行を無視して、AVG 集計がこのテーブルに適用されます。

以上がSQL Server で NULL 値を含む複数の列の平均を正しく計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート