MongoDBで平均値を計算する方法(aggregateと$avg演算子の使い方)
MongoDBでコレクション内の数値データの平均値を求めたい場合、aggregate()メソッドと$avg演算子を組み合わせて使用します。本記事では、実際にサンプルデータを作成しながら、平均値を算出する手順をわかりやすく解説します。
サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。ここでは「Score」というフィールドを持つドキュメントをinsertOne()メソッドで3件挿入します。
> db.demo159.insertOne({"Score":50});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3557b2fdf09dd6d0853a01")
}
> db.demo159.insertOne({"Score":70});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3557b6fdf09dd6d0853a02")
}
> db.demo159.insertOne({"Score":60});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3557c4fdf09dd6d0853a03")
}
登録したドキュメントの確認
次に、find()メソッドを使って、コレクション内のすべてのドキュメントを表示して確認します。
> db.demo159.find();
このクエリを実行すると、以下のような出力結果が得られます。
{ "_id" : ObjectId("5e3557b2fdf09dd6d0853a01"), "Score" : 50 }
{ "_id" : ObjectId("5e3557b6fdf09dd6d0853a02"), "Score" : 70 }
{ "_id" : ObjectId("5e3557c4fdf09dd6d0853a03"), "Score" : 60 }
「Score」フィールドには、50、70、60という3つの数値が格納されていることが確認できます。
$avg演算子で平均値を計算する
それでは、いよいよ平均値を計算します。aggregate()メソッド内の$groupステージで$avg演算子を使用することで、「Score」フィールド全体の平均値を取得できます。ここでは、グループ化のキーとして_id: nullを指定することで、すべてのドキュメントを1つのグループとして扱っています。
> db.demo159.aggregate([{$group: {_id:null, AverageValue: {$avg:"$Score"} } }])
この集計クエリを実行すると、次のような出力結果になります。
{ "_id" : null, "AverageValue" : 60 }
(50 + 70 + 60) ÷ 3 = 60 となり、正しく平均値が計算できていることがわかります。
ポイントまとめ
- $avg演算子:指定したフィールドの数値の平均値を返す集計演算子です。
- $groupステージ:
_id: nullを指定すると、コレクション全体を1つのグループとして集計できます。 - 条件を絞り込む場合:特定の条件に一致するドキュメントのみの平均を求めたい場合は、
$matchステージを$groupの前に追加すると便利です。
このように、MongoDBのアグリゲーションフレームワークを活用すれば、複雑な統計処理も柔軟かつ効率的に実行できます。
-
MongoDBで配列の値を使ってコレクションを並べ替える方法
MongoDBのコレクションを配列の値を基準にソートしたい場合は、aggregate()メソッドと $sort ステージを組み合わせて使用します。さらに、配列を個々のドキュメントに分解するために $unwind も活用します。 サンプルコレクションの作成 まず、ドキュメントを含むコレクションを作成しましょう。ここでは、学生ごとの詳細情報(名前とスコア)を配列として持つドキュメントを挿入します。 > db.demo577.insertOne( ... { ... student: { ... details: [ ... { .
-
MySQLでデータベースの平均値を計算する方法|AVG関数の使い方を解説
MySQLでテーブル内の数値データの平均値を求めたい場合、AVG() 関数を使用します。AVG関数は指定したカラム(列)に含まれる値の平均を自動的に計算してくれる集計関数です。AVG関数の基本構文複数のカラムに対してそれぞれ平均値を求める場合は、以下のような構文になります。SELECT avg(カラム名1) AS 別名1, avg(カラム名2) AS 別名2, avg(カラム名3) AS 別名3, ... FROM テーブル名;実際にサンプルテーブルを作ってみようここでは、3つのINT型カラムを持つテーブル「demo31」を作成します。mysql>