当前位置: 首页 > 面试题库 >

CosmosDb计算不同元素

楚墨一
2023-03-14
问题内容

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

这是默认计数:

SELECT value count(c.id) FROM c

和无数的独特作品:

SELECT distinct c.id FROM c

但这会返回错误的请求-语法错误: SELECT value count(distinct c.id) FROM c

countdistinct他们一起工作吗?


问题答案:

这是另一个解决地区问题并适用于的查询count。基本上,您需要封装不重复内容然后进行计数。我们已经通过分页对它进行了测试,以查找您想要唯一记录的情况,而不仅是计数,而且它正在起作用。

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

您还可以where根据条件所基于的内容,在括号的内部和外部使用子句。

这在另一个答案中也略有不同。

查看CosmosDB的select子句文档。

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

[原始回答]

2018年10月19日添加了对 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限制,并且不会成功。如果是这种情况,您可以在服务器端实现类似的代码,但效果并不理想。



 类似资料:
  • 我想计算两个集合中不同元素的数量。这就是集合1和集合2的并集。 如何将以下伪SQL格式化为有效的SQL 编辑set1和set2是表1的两列 下面是一个简短的例子: 在一个班里安排1名学生: 在一个班里安排两名学生: 我想要两个班的学生人数不同: 所以,一个工会就行了,我可以数一数。

  • 我的宇宙数据库每天都会更新一些数据 我的逻辑设置为24小时循环。我的问题是,如果cosmosdb中添加了任何新数据,我无法获取过去24小时的数据。我只想用“_ts”来获取最后24小时的数据。知道怎么做吗? 尝试了这个,但没有得到所需的结果。

  • 我想数一数一条流的不同元素,我想知道为什么 不行,日蚀告诉我 类型收集器中的方法toMap(Function,Function,BinaryOperator)不适用于参数((s)- 顺便说一句,我知道这个解决方案: 所以我有两个问题: 我的第一个方法有什么错误 编辑:我自己解决了第一个问题: Java需要一个函数作为第二个参数。

  • 问题内容: 我有一个有趣的查询需要做。我有一张表,其中有一列包含ip地址编号(使用)和一列。我希望能够计算每天有唯一IP地址列的数量。也就是说,每天有多少个不同的ip行。因此,例如,如果一个IP地址在同一天两次,则在最终计数中将计为1;但是,如果同一IP地址在另一天,则将被计算为第二个计数。 示例数据: 问题答案: SQLFiddle演示

  • 我有这个模式 列表表 [{“movie_id”:100,“gene1”:“犯罪”,“计数”:1,“id”:100},{“movie_id”:141267,“gene1”:“犯罪”,“计数”:1,“id”:141267},{“movie_id”:207932,“gene1”:“犯罪”,“计数”:1,“id”:207932},{“movie_id”:238636,“gene1”:“惊悚”,“计数”:1

  • 问题内容: 我可以在不枚举的情况下计算每列的不同值吗? 说我有一个表,,,并没有其他的列。在没有明确提及这些列的情况下,我希望得到与以下结果相同的结果: 我怎样才能做到这一点 ? 问题答案: 我认为使用普通SQL可以轻松完成的最好工作就是运行这样的查询,以生成所需的查询,然后运行该查询。