如何在Azure Cosmos DB SQL API中正确使用SUM聚合函数分组查询
Cosmos DB 分组聚合查询正确解决方案
报错根因
VALUE关键字的作用是指定查询仅返回该关键字后紧跟的单个值,不能和其他普通字段并列写在 SELECT 子句中,你之前将VALUE SUM(...)和SUPPLIER、PARTNUMBERID字段并列书写,违反了语法规则,触发第一个报错。- Cosmos DB 对跨分区的聚合类查询强制要求使用
VALUE关键字返回聚合结果,所以省略VALUE的写法不满足跨分区查询要求,触发第二个报错。
正确查询语句
你需要把需要返回的分组维度字段和聚合值打包成单个对象,放在VALUE关键字后即可:
SELECT VALUE { SUPPLIER: od.SUPPLIER, PARTNUMBERID: p.PARTNUMBERID, QTY: SUM(p.QTY) } FROM od JOIN p IN od.PARTNUMBER GROUP BY od.SUPPLIER, p.PARTNUMBERID
效果说明
针对你提供的样例文档,执行上述查询后将返回符合需求的统计结果:
[ {"SUPPLIER": "XPTO", "PARTNUMBERID": "PARTNUMBER0001", "QTY": 530}, {"SUPPLIER": "XPTO", "PARTNUMBERID": "PARTNUMBER0002", "QTY": 593}, {"SUPPLIER": "ZZZZ", "PARTNUMBERID": "PNZZZZ0001", "QTY": 530}, {"SUPPLIER": "ZZZZ", "PARTNUMBERID": "PNZZZZ0002", "QTY": 593} ]
该写法同时兼容跨分区查询规则,不会触发权限类报错。
内容的提问来源于stack exchange,提问作者Jose Marcelo Dias de Oliveira
相关产品推荐
相关产品推荐

