Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Couchbase 如何编写一个n1ql查询来对同一存储桶中多个文档的值求和_Couchbase_N1ql - Fatal编程技术网

Couchbase 如何编写一个n1ql查询来对同一存储桶中多个文档的值求和

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

我是Couchbase DB服务器的新手,我正试图用一个查询实现我用三个查询所做的,因为这不是很有效

我在同一个桶中有三种不同的文档类型(x、y、z);都有一个类似的键:“district”如下:

文件十:

{
  "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。