【问题标题】:Property reference is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause选择列表中的属性引用无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中
【发布时间】:2019-03-26 05:10:48
【问题描述】:

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 的子句。而如果不支持,这个错误是什么意思?

【问题讨论】:

  • 我想你可以参考这个问题的公认答案:stackoverflow.com/questions/45270125/…
  • 我想在查询中像有问题的那样在查询中执行此操作,因为可以通过这种方式查看使用较少 RU 的内容来进行优化。在 LINQ(或 lumenize)中做这件事可能不会给我这个优势。

标签: azure-cosmosdb document-database


【解决方案1】:

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

现在,您可以参考 SO 线程 Grouping by a field in DocumentDB,这对您很有帮助。答案在Document Db stored procedure的基础上写了一个库documentdb-lumenize,大家可以试试。

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

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

如Java代码:

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

【讨论】:

  • 那么您认为当前的消息具有误导性吗?
  • @NikhilGirraj 是的,我认为这是误导。也许您可以向 azure 团队提交反馈。
  • 有了这个评论,这个答案似乎是我所需要的。谢谢。
猜你喜欢
  • 2014-04-16
  • 2014-05-14
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多