当前位置: 首页 > 知识库问答 >
问题:

如何在 Azure Cosmos DB 中使用 SUM aggragate 函数

郭坚壁
2023-03-14

如官方文档中所述,Cosmos Db SQL API支持聚合函数。然而,我找不到任何对项的多级文档结构执行聚合的良好查询示例。这是我的Cosmos DB容器项的结构。我正在使用SQL API

{
"id": "1",
"invoiceNo": "INV0001",
"date": "2019/12/20",
"userId": "cashier1",
"invoiceDetails": [
    {
        "itemName": "Item 1",
        "qty": 1,
        "unitPrice": 100,
        "lineTotal": 100
    },
    {
        "itemName": "Item 2",
        "qty": 3,
        "unitPrice": 200,
        "lineTotal": 600
    },
    {
        "itemName": "Item 6",
        "qty": 1,
        "unitPrice": 300,
        "lineTotal": 300
    }
],
"_rid": "h9Q6AKtS7i0BAAAAAAAAAA==",
"_self": "dbs/h9Q6AA==/colls/h9Q6AKtS7i0=/docs/h9Q6AKtS7i0BAAAAAAAAAA==/",
"_etag": "\"1500611a-0000-1800-0000-5e00fbd40000\"",
"_attachments": "attachments/",
"_ts": 1577122772

}

我想得到发票明细的总和。使用SQL查询的lineTotal。非常感谢您的回答

共有1个答案

轩辕煌
2023-03-14

像这样使用SELECT... from... IN允许您只处理文档的一部分,在本例中是发票详细信息数组。

所以这个查询:

SELECT *
FROM a in c.invoiceDetails

产生:

[
    {
        "itemName": "Item 1",
        "qty": 1,
        "unitPrice": 100,
        "lineTotal": 100
    },
    {
        "itemName": "Item 2",
        "qty": 3,
        "unitPrice": 200,
        "lineTotal": 600
    },
    {
        "itemName": "Item 6",
        "qty": 1,
        "unitPrice": 300,
        "lineTotal": 300
    }
]

然后可以使用SUM对数组中的项进行求和。

SELECT SUM(a.lineTotal) AS SumLineTotal
FROM a in c.invoiceDetails

并得到:

[
    {
        "SumLineTotal": 1000
    }
]
 类似资料:
  • 我目前正在阅读React官方网站,在那里我遇到了这个问题。React官方网站声明我们可以在JSX中使用函数代码。因此,我尝试了以下代码,但不起作用。 ABCD类扩展了React。组件{ } 我知道,我知道,你们中的一些人可能会说,看看React网站上给出的例子。我看到了,官网上的例子涉及到外部功能。我只是想知道我们能否独立使用JSX内部的函数。 有关更多信息,请参阅此链接:https://reac

  • 问题内容: 我正在用Java执行一个项目,该项目具有在数据库中添加文件的功能,并且我想使用winapi函数来选择文件。我该怎么办? 问题答案: 到目前为止,最简单的方法是使用Java JNA,它已经具有stcalls的翻译功能。 您可以在JavaWorld上找到它的基础教程(至少有Winapi示例)。 您也可以使用JNI,但是JNI要求您使用专门构建的头文件进行接口连接,而这一切都很难维护和使用。

  • 问题内容: 因此,在我正在编写的此程序中,我实际上是使用表单从用户那里获取SQL查询。然后,我继续在数据库上运行该查询。 我知道不要“信任”用户输入,因此我想对输入进行清理。我正在尝试使用,但未能成功使用。 输入以下内容,这就是我要尝试的内容: 这总是给我 “输入无效!” 错误。 当我取出零件并仅对查询运行时, “输入无效” 不输出信息。相反,当我这样做时: 它不输出 “输入无效”。 但是,我需要

  • 问题内容: 我不知道如何在JavaScript中使用多个ID。单个ID和getElementById没问题,但是一旦我将ID更改为class并尝试使用getElementsByClassName,该函数就会停止工作。我已经读了约100条关于该主题的文章;仍然没有找到答案,所以我希望这里的人知道如何使getElementsByClassName工作。 这是我用于测试的一些简单代码: 问题答案: 返回

  • 问题内容: 尝试使用Go的http包时,我无法确定的语法。尽管我尝试了其他一些被编译器拒绝的其他事情,但这里只有我标记的以下内容是我必须编译的。 该URL可以,因为可以正常使用,但是在我运行时,它只是一个空字符串,并且始终为零。我需要怎么做才能取出数据?编译器拒绝了其他尝试。 输出看起来像这样: 问题答案: 尝试给切片buf设置一个大小,例如 读取器最多读取给定缓冲区的len()。 来自io.go

  • 问题内容: 输入完成后,我会正确获得信用卡信息,我调用了一个函数来验证使用luhn模块的信用卡(npm install luhn),因为我使用的是: 未捕获的ReferenceError:未定义require 很抱歉,如果这是一个简单的问题,但由于找不到npm打包用法的逻辑短解决方案。我称这个时间功能。 再次相同的错误。 因此在js中,必须有使用npm模块的简单方法。但是我找不到。请我需要帮助。

  • 问题内容: 我想知道是否可以在ajax调用中使用诸如query_post()之类的函数? 假设我正在调用文件_inc / ajax.php 我想笨拙地使用wordpress函数,但是我不知道为什么。有人可以帮我吗? 非常感谢 :) 问题答案: WordPress提供了一个Ajax网址,您应该将其与完整的Ajax API 一起使用。 您需要创建一个jQuery函数。 例: ajaxurl var始终

  • 问题内容: 下面的查询试图选择给定节点的子节点。如何使用变量而不是对子节点进行硬编码,以便可以将它们作为参数传递给SProc? 问题答案: