couchbase - couchbase 查询返回总和的高值
问题描述
我的文档包含 183 个 Person 类型和 2723 个 Purchase 类型文档。基本上,一个人购买产品。示例文档如下。一个人可能从未购买过任何东西。
{"Type" : "Person", PersonID: 1, InitialFee: 100, "MemberGroupTypeID" : 1, _id:"Person_1_1"},
{"Type" : "Person", PersonID: 2, InitialFee: 200, "MemberGroupTypeID" : 1, _id:"Person_1_1"},
{"Type" : "Purchase", PersonID: 1, PurchaseID:1, Value: 5, "MemberGroupTypeID" : 1, _id:"Purchase_1_1_1"},
{"Type" : "Purchase", PersonID: 1, PurchaseID:2, Value: 10, "MemberGroupTypeID" : 1, _id:"Purchase_2_1_1"},
{"Type" : "Purchase", PersonID: 1, PurchaseID:3, Value: 25, "MemberGroupTypeID" : 1, _id:"Purchase_3_1_1"}
基本上,预期的输出是:
MemberGroupTypeID: 1, FeesTotal: 300, TotalPurchasesCost: 40
我有以下查询,它为每种类型的成员组返回正确的总购买成本,但 FeesTotal 太高了,我不知道它是如何获得这个数字的。我的意思是,在运行查询后,我无法发现预期数字与实际 FeesTotal 之间的关系:
SELECT SUM(person.InitialFee) AS FeesTotal,
SUM(purchase.Value) as TotalPurchasesCost,
person.MemberGroupTypeID
FROM bucket person
LEFT JOIN bucket purchase
ON person.MemberGroupTypeID= purchase.MemberGroupTypeID
WHERE person.Type = "Person" AND purchase.Type = "Purchase" AND
person.PersonId = purchase.PersonId
GROUP BY person.MemberGroupTypeID;
解决方案
JOIN 时,每个 Left Side 可以产生 1:n。如果您汇总,则它会计算多次。
通过首先对整个左侧文档进行分组,然后对所需字段进行分组来使用两级聚合。
SELECT b.MemberGroupTypeID,
SUM(b.InitialFee) AS FeesTotal,
SUM(b.PurchasesCost) AS TotalPurchasesCost,
FROM (SELECT person.InitialFee,
person.MemberGroupTypeID,
SUM(purchase.`Value`) AS PurchasesCost
FROM bucket AS person
LEFT JOIN bucket AS purchase
ON person.MemberGroupTypeID = purchase.MemberGroupTypeID
AND purchase.Type = "Purchase" AND person.PersonId = purchase.PersonId
WHERE person.Type = "Person"
GROUP BY person) AS b
GROUP BY b.MemberGroupTypeID;
推荐阅读
- linux-kernel - 为什么我们需要 DMA 池?
- terraform - 如何使用在另一个资源的秘密中创建的令牌?
- ios - 如何在 SwiftUI 中使用 ViewBuilder 将内容限制为自定义视图/组件上的 Text()
- javascript - 为什么在 JavaScript 对象中添加数字会默认对其进行排序?
- java - 如何将每一列复制到单独的文件中
- django - 如何从为 is_valid() 返回 False 的 Django 表单获取图像数据
- python - 删除 .csv 文件中的行 (Python)
- javascript - 如何在执行导入之前开玩笑地模拟全局变量?
- types - Cudnn 是否支持 INT32 数据类型?
- java - Eclipse JavaFX 不显示 GUI