SQLSERVERでの平均の求め方
2011-01-24


今回は、ちょっとした小技をひとつ!
データベース上に登録されているデータの平均点を取る方法です。

学校で使うシチュエーションとしては、成績を出す場合に平均点が必要になります。
100点満点で何点かですが、個人の平均もあれば、科目の平均、クラス単位での平均など、結構頻繁に使用することになります。

今回は、SQLで直接平均値を求める方法です。

学校では、SQLServerを使っているので、SQLServerで使える方法ですが、
他のデータベースでも、同じような感じでいけると思います。

まず、平均を求めるのは、AVG関数です。
SQL上でAVG関数を指定することで平均値を算出します。

データは下記のような形で考えていきます。
採点テーブル
学籍 科目 点数
A01 国語 75
A01 数学 77
A01 英語 48
A02 国語 48
A02 数学 55
A02 英語 48

学籍がA01の平均を求める場合のSQL文を作ってみたいと思います。

SELECT AVG(点数) as 平均 from 採点テーブル where 学籍 = 'A01'

SQL文はこんな感じでいけると思うので、実行してみます。
結果は下記のとおりです。

平均
-------
64

点数はintegerになっているので、小数点以下が切り捨てられ、
64になってしまいました。
小数1位まで表示を出したいので、このままでは使えません。
なので、まず小数の表示がでるようにSQLを修正します。

SELECT AVG(CAST(点数 as decimal(3,1))) as 平均
from 採点テーブル where 学籍 = 'A01'

decimalを使って小数点以下を表示させます。

平均
-------
64.727272

DecimalでCASTした結果、小数点以下が表示されましたが、
小数1位までの表示にしたいとおもいます。
四捨五入の関数であるROUNDを追加します。

SELECT ROUND(AVG(CAST(点数 as decimal(3,1))),1) as 平均
from 採点テーブル where 学籍 = 'A01'

ROUNDで表示する小数を1位に指定して実行しました。

平均
-------
64.7

いろいろと指定をしないと思うように表示できませんが、
面倒くさい気もしますね!
[データベース]
[SQLServer]
[小技]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット