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

How to use SUM aggragate functions in Azure Cosmos DB

official documentation 中所述,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 查询获得 invoiceDetails.lineTotal 的总和。非常感谢您的回答

像这样使用 SELECT...FROM...IN 允许您只处理文档的一部分,在本例中为 invoiceDetails 数组。

所以这个查询:

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
    }
]