gpt4 book ai didi

sql - CosmosDb 计算不同元素的数量

转载 作者:行者123 更新时间:2023-12-03 15:26:51 25 4
gpt4 key购买 nike

是否有直接函数来计算 CosmosDb 查询中不同元素的数量?

这是默认计数:

SELECT value count(c.id) FROM c

以及无数的独特作品:

SELECT distinct c.id FROM c

但这会返回错误请求 - 语法错误: 从 c 中选择值计数(不同的 c.id)

countdistinct 如何协同工作?

最佳答案

[2020 年 11 月 19 日更新]

这是另一个解决地区问题的查询,适用于 count。基本上,您需要封装不同的值然后进行计数。我们已经通过分页对其进行了测试,适用于您需要唯一记录而不仅仅是计数的情况,而且它也能正常工作。

select value count(1) from c join (select distinct value c from p in c.products)

您还可以在括号内部和外部使用 where 子句,具体取决于您的条件所依据的条件。

这里的另一个答案也提到了略有不同的内容。

检查select clause documentation对于 CosmosDB。

@ssmsexe 引起了我的注意,我想在这里更新答案。

[原始答案]

19th Oct 2018 上添加了对 distinct 的支持

以下查询工作正常

SELECT distinct value c FROM c join p in c.products

但是,它仍然无法进行计数。

计算非重复计数的解决方法是创建一个存储过程来执行非重复计数。它基本上会查询并继续直到结束并返回计数。

如果您将如上所述的不同查询传递给下面的存储过程,您将获得一个不同的计数

function count(queryCommand) {
var response = getContext().getResponse();
var collection = getContext().getCollection();
var count = 0;

query(queryCommand);

function query(queryCommand, continuation){
var requestOptions = { continuation: continuation };
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
queryCommand,
requestOptions,
function (err, feed, responseOptions) {
if (err) {
throw err;
}

// Scan results
if (feed) {
count+=feed.length;
}

if (responseOptions.continuation) {
// Continue the query
query(queryCommand, responseOptions.continuation)
} else {
// Return the count in the response
response.setBody(count);
}
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
}

该解决方法的问题在于,它可能会超出集合的 RU 限制并导致失败。如果是这种情况,您可以在服务器端实现类似的代码,但这并不是很好。

关于sql - CosmosDb 计算不同元素的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50607120/

25 4 0
文章推荐: presto - 在Presto中转换Unix时间至今
文章推荐: jenkins - 如何在 Jenkins 上重新构建任务直到构建成功?
文章推荐: vuejs2 - Vue.js : what's the difference between and
?
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com