首页 > 解决方案 > 选择列表中的属性引用无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中

问题描述

Azure Cosmos Document DB 在执行这样的查询时抛出错误 -

SELECT DISTINCT VALUE 
{ 
    DocumentName: c.Name, 
    Count: COUNT(c.id),
    Target: c.Target
}
FROM c where c.Target != null

错误 -

SC2102:属性引用“c.Name”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中

SC2102:属性引用“c.Target”在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中

在常规 SQL 中,我将通过添加来解决这个问题

GROUP BY c.Name, c.Target

在查询结束时,但 Cosmos DB 似乎不支持 group 子句。

SC1001:语法错误,“GROUP”附近的语法不正确。

我想知道是否支持类似 GROUP 的子句。如果不支持,这个错误是什么意思?

标签: azure-cosmosdbdocument-database

解决方案


基于azure cosmos db 反馈group by目前正在积极开发中,并将尽快发货。

现在,您可以参考DocumentDB 中的 SO thread Grouping by a field,这对您很有帮助。答案写了一个基于Document Db 存储过程的库documentdb-lumenize,你可以试试。

如果您确实关心 RU,当然您可以衡量存储过程的 RU 消耗。

您可以executeStoredProcedure在 Cosmos DB SDK 中调用方法,然后使用getRequestCharge()方法。它不会显示在门户中。

如Java代码:

StoredProcedureResponse resourceResponse = documentClient.executeStoredProcedure("dbs/db/colls/item/sprocs/b",requestOptions ,null);
System.out.println(resourceResponse.getRequestCharge());

推荐阅读