SQL GROUP BYとSUMをMongoDBの$groupと$sumフィールドに変換する
SQL GROUP BYとSUM(column)が特定フィールドの$sumアキュムレータを使用したMongoDB集計パイプラインに変換される方法を学びます。
Aggregation
詳細な説明
GROUP BY SUMから$group $sumへ
COUNTがドキュメントごとに1を加算するのに対し、SUMは実際のフィールド値を加算します。MongoDBの$sumアキュムレータは両方のケースを処理します — 違いは1を渡すかフィールド参照を渡すかです。
SQLの例
SELECT category, SUM(amount) AS total_amount
FROM transactions
GROUP BY category
生成されるMongoDBクエリ
db.transactions.aggregate([
{
$group: {
_id: "$category",
total_amount: { $sum: "$amount" },
category: { $first: "$category" }
}
}
])
フィールド参照を使った$sum
COUNTとの主な違いは$sumの引数です:
{ $sum: 1 }— ドキュメントをカウント(COUNT(*)と同等){ $sum: "$amount" }—amountフィールドの値を合計(SUM(amount)と同等)
$プレフィックスは、リテラル文字列ではなくフィールドの値を参照するようMongoDBに指示します。
複数の集計
SQLでは単一クエリで複数の集計関数を使用できます:
SELECT category, SUM(amount) AS total, COUNT(*) AS count
FROM transactions
GROUP BY category
db.transactions.aggregate([
{
$group: {
_id: "$category",
total: { $sum: "$amount" },
count: { $sum: 1 },
category: { $first: "$category" }
}
}
])
NULL値の処理
SQLではSUMはNULL値を無視します。MongoDBの$sumもフィールドが欠落またはnullのドキュメントを無視し、同じ動作を生成します。ただし、フィールドに非数値の値が含まれている場合、MongoDBはSQLのようにエラーを発生させるのではなく、それらをスキップします。
小数点精度
金融計算の場合、MongoDBはデフォルトでIEEE 754浮動小数点を使用することに注意してください。正確な小数演算にはSQLのDECIMAL / NUMERIC型に類似したDecimal128型を使用してください。
ユースケース
商品カテゴリ、地域、期間別の総売上を計算する収益レポーティングクエリは、あらゆるビジネスインテリジェンスシステムの核心です。SUM集計の変換は、SQLからMongoDBに移行する財務ダッシュボードにとって重要です。