Couchbase 如何编写一个n1ql查询来对同一存储桶中多个文档的值求和
我是Couchbase DB服务器的新手,我正试图用一个查询实现我用三个查询所做的,因为这不是很有效 我在同一个桶中有三种不同的文档类型(x、y、z);都有一个类似的键:“district”如下: 文件十:Couchbase 如何编写一个n1ql查询来对同一存储桶中多个文档的值求和,couchbase,n1ql,Couchbase,N1ql,我是Couchbase DB服务器的新手,我正试图用一个查询实现我用三个查询所做的,因为这不是很有效 我在同一个桶中有三种不同的文档类型(x、y、z);都有一个类似的键:“district”如下: 文件十: { "type": "x", "district": "Some district" } 文件y: { "type": "y", "district": "Some district" } 文件z: { "type": "z", "district": "Some
{
"type": "x",
"district": "Some district"
}
文件y:
{
"type": "y",
"district": "Some district"
}
文件z:
{
"type": "z",
"district": "Some district"
}
我目前已经在PHP中实现了类似以下的伪代码:
$totalDistrictInX = "SELECT COUNT(x) FROM bucket WHERE type = 'x' AND district = 'Maboro';
$totalDistrictInY = "SELECT COUNT(x) FROM bucket WHERE type = 'y' AND district = 'Maboro';
$totalDistrictInZ = "SELECT COUNT(x) FROM bucket WHERE type = 'z' AND district = 'Maboro';
$totalCountOfMaboro = $totalDistrictInX + $totalDistrictInY + $totalDistrictInZ;
我无法使用联接查询,因为当前使用的Couchbase服务器低于5.50
有没有一种方法可以通过一个n1ql查询实现这一点?任何帮助都将不胜感激。您可以通过
分组和计数组合解决问题吗
SELECT COUNT(x) FROM bucket WHERE district = 'Maboro' GROUP BY type
您的解决方案是否可以是分组依据
和计数
组合
SELECT COUNT(x) FROM bucket WHERE district = 'Maboro' GROUP BY type
使用不带分组依据的聚合查询进行总计数,通过谓词控制要计数的文档
SELECT COUNT(1) AS cnt
FROM bucket
WHERE type IN ['x', 'y', 'z'] AND district = 'Maboro';
如果您需要每种类型的计数,请使用分组方式
SELECT type, COUNT(1) AS cnt
FROM bucket
WHERE type IN ['x', 'y', 'z'] AND district = 'Maboro'
GROUP BY type;
如果您想要总计数和单个类型,则其计数为数组
SELECT ARRAY_SUM(av[*].cnt) AS totalcnt, av AS details
LET av = (SELECT type, COUNT(1) AS cnt
FROM bucket
WHERE type IN ['x', 'y', 'z'] AND district = 'Maboro'
GROUP BY type);
对总计数使用不带分组的聚合查询,通过谓词控制要计数的文档
SELECT COUNT(1) AS cnt
FROM bucket
WHERE type IN ['x', 'y', 'z'] AND district = 'Maboro';
如果您需要每种类型的计数,请使用分组方式
SELECT type, COUNT(1) AS cnt
FROM bucket
WHERE type IN ['x', 'y', 'z'] AND district = 'Maboro'
GROUP BY type;
如果您想要总计数和单个类型,则其计数为数组
SELECT ARRAY_SUM(av[*].cnt) AS totalcnt, av AS details
LET av = (SELECT type, COUNT(1) AS cnt
FROM bucket
WHERE type IN ['x', 'y', 'z'] AND district = 'Maboro'
GROUP BY type);
感谢你的努力,但这不起作用。@vsr.给出的答案表示感谢,但这不起作用。答案是@vsr。