【发布时间】:2021-05-13 07:13:09
【问题描述】:
UNNEST 数组上的 N1ql SUM
我有一个包含以下文档的存储桶(Couchbase 社区版 6.5):
钓鱼文档
{
"boatIds": ["boatId_1","boatId_2","boatId_3"],
"areaIds": ["areaId_1","areaId_2","areaId_3"],
"total": 10,
"date": "2021-05-13T00:00:00Z",
"type": "fishing"
},
{
"boatIds": ["boatId_1","boatId_3"],
"areaIds": ["areaId_2","areaId_3"],
"total": 25,
"date": "2021-05-15T00:00:00Z",
"type": "fishing"
}
RiverDoc
{
"_id": "areaId_1",
"size": 5,
"type": "river"
},
{
"_id": "areaId_1",
"size": 10,
"type": "river"
},
{
"_id": "areaId_1",
"size": 15,
"type": "river"
}
船文档
{
"_id": "areaId_1",
"name": "Small Boat",
"type": "boat"
},
{
"_id": "areaId_1",
"name": "Medium Boat",
"type": "boat"
},
{
"_id": "areaId_1",
"name": "Large Boat",
"type": "boat"
}
我需要一个查询,我可以在其中获取每条河流和每艘船的所有钓鱼文档。我在以下查询中使用 UNNEST 运算符得到了这个工作:
SELECT river.size,
boat.name,
fishing.total
FROM bucket_name fishing
UNNEST fishing.riverIds AS river
UNNEST fishing.boatIds AS boat
WHERE fishing.type = "fishing"
但是这个查询的问题是,上面查询的总值是整个钓鱼对象的总值。
我需要得到相对于未嵌套河流大小的总数。所以我需要加入并汇总钓鱼对象的所有河流的总数,并获得特定河流相对于总数的大小。
这是我想到的选择语句,但我不知道如何实际编写正确的查询:
SELECT river.size,
boat.name,
river.size/SUM( fishing.riverIds[0].size, fishing.riverIds[1].size, fishing.riverIds[2].size ) * fishing.total
FROM bucket_name fishing
UNNEST fishing.riverIds AS river
UNNEST fishing.boatIds AS boat
WHERE fishing.type = "fishing"
【问题讨论】:
-
是文档密钥与_id 相同,还有船,reviver 有所有 areaId_1 是不是拼写错误。是否有任何关系boatIds,areaIds 数组
-
river.size/ARRAY_SUM(fishing.riverIds[*].size) * fishing.total