SQL AVG、MIN、MAXをMongoDB集計アキュムレータに変換する
SQL集計関数AVG()、MIN()、MAX()が$groupパイプラインステージのMongoDB $avg、$min、$maxアキュムレータに変換される方法を学びます。
Aggregation
詳細な説明
AVG、MIN、MAX集計関数
SQLのAVG、MIN、MAX集計関数にはそれぞれ、$groupステージのアキュムレータ演算子に直接対応するMongoDBの同等物があります。
SQLの例
SELECT department,
AVG(salary) AS avg_salary,
MIN(salary) AS min_salary,
MAX(salary) AS max_salary
FROM employees
GROUP BY department
生成されるMongoDBクエリ
db.employees.aggregate([
{
$group: {
_id: "$department",
avg_salary: { $avg: "$salary" },
min_salary: { $min: "$salary" },
max_salary: { $max: "$salary" },
department: { $first: "$department" }
}
}
])
アキュムレータマッピング
| SQL関数 | MongoDB演算子 | 説明 |
|---|---|---|
AVG(col) |
{ $avg: "$col" } |
値の算術平均 |
MIN(col) |
{ $min: "$col" } |
最小値 |
MAX(col) |
{ $max: "$col" } |
最大値 |
SUM(col) |
{ $sum: "$col" } |
値の合計 |
COUNT(*) |
{ $sum: 1 } |
ドキュメント数 |
GROUP BYなしの場合
SQLではGROUP BYなしで集計関数を使用でき、テーブル全体を集計します:
SELECT AVG(price) AS avg_price FROM products
MongoDBでは、すべてのドキュメントを集計するためにnullを_idとして使用します:
db.products.aggregate([
{ $group: { _id: null, avg_price: { $avg: "$price" } } }
])
非数値フィールドでの$minと$max
SQLではMINとMAXは通常数値や日付に使用されますが、MongoDBの$minと$maxはBSON比較順序に従い、型をまたいで機能します。文字列は辞書順で、日付は時系列で比較され、異なる型はMongoDBの比較階層に従います。
$matchとの組み合わせ
集計前にドキュメントをフィルタリングするために、$groupの前に$matchステージを追加します。これはGROUP BYの前のSQL WHEREと同等です:
db.employees.aggregate([
{ $match: { status: "active" } },
{ $group: { _id: "$department", avg_salary: { $avg: "$salary" } } }
])
ユースケース
部門別の給与統計を表示するHRダッシュボード、カテゴリ別の平均評価を示す商品分析、最小/最大応答時間による運用監視はすべてこれらの集計関数に依存します。あらゆる分析移行の重要な構成要素です。