SQL Server 平均値を取得する

SQL Server 平均値を取得する

SQL Serverで、平均値を取得する手順を記述してます。

環境

  • OS windows10 pro
  • SQL server2017 Version 14.0.3223.3
  • SSMS 18.7.1

平均値を取得

平均値を取得するには、「AVG」を使用します。

SELECT AVG(カラム名)
  FROM テーブル名

実際に、以下のテーブルのカラム「age」の平均値を取得してみます。
ここでは「Test」というテーブルを使用してます。

「AVG」を使用します。

SELECT AVG([age]) as ave
FROM [dbo].[Test]

実行結果

平均値が取得されていることが確認できます。

NULLがあった場合

レコードに「NULL」が含まれていた場合は、結果が少し変わります。

わかりやすくするため、合計値とレコード数も表示して「AVG」を実行してみます。

SELECT AVG([age]) as ave , sum([age]) as sum , count([age]) as count
FROM [dbo].[Test]

実行結果を見ると、10ではなく9でカウントして、演算していることがわかります。
※少数まで結果で取得する場合は、後述

9ではなく10で実行したい場合は「ISNULL」を使用して、NULLを0に変換して実行します。

SELECT AVG(ISNULL([age],0)) as ave , sum(ISNULL([age],0)) as sum , count(ISNULL([age],0)) as count
FROM [dbo].[Test]

実行結果

少数に変換

また、上記のように9でわると結果が少数になるので、少数まで表示したい場合は型を変換します。

SELECT AVG(CAST([age] as DECIMAL)) as ave
FROM [dbo].[Test]

実行結果

少数まで取得されていることが確認できます。

各データごとに平均値を求める

group by すれば、各データごとの平均値を求めることが可能です。

以下のテーブルをnameごとに平均値を求めてみます。

group byを実行します。

SELECT name, AVG(CAST([age] as DECIMAL)) as ave
FROM [dbo].[Test]
group by [name]

実行結果を確認すると、nameの値ごとに平均値が取得されていることが確認できます。