複数列の平均
テーブル内の複数の列の平均を計算する場合、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 サイトの他の関連記事を参照してください。