如何通过ComosDb中聚合函数的结果对查询结果进行排序?

时间:2019-11-21 10:59:19

标签: sql azure sql-order-by azure-cosmosdb aggregate-functions

我使用Cosmos Db,我需要根据 COUNT 的结果对结果进行排序。

我希望自己直接在Cosmosdb的查询输出中对结果进行排序,而不是每次自己对结果进行排序(或为其创建服务)。

在Azure的文档资源管理器中,我对AggregatedEvent集合执行以下请求:

SELECT * FROM (
    SELECT COUNT(1) AS AlarmCount, a.AlarmType FROM AggregatedEvent a
    WHERE a.AlarmType != null and a.Prom > 0
    GROUP BY a.AlarmType ) AS g
ORDER BY g.AlarmCount

它会导致以下错误消息:

  

标识符'AlarmCount'无法解析。

如果我使用另一个属性对文档中存在的g.AlarmType属性进行排序,则将执行排序。

仅当您有办法归档CosmosDb的订购时,请添加答案。

2 个答案:

答案 0 :(得分:0)

我认为您可以通过在查询内部使用order来实现结果。如下所示。

SELECT * FROM (
   SELECT COUNT(1) AS AlarmCount, a.AlarmType FROM AggregatedEvent a
   WHERE a.AlarmType != null and a.Prom > 0
   GROUP BY a.AlarmType ORDER BY COUNT(1) ) AS g

OR

SELECT COUNT(1) AS AlarmCount, a.AlarmType FROM AggregatedEvent a
   WHERE a.AlarmType != null and a.Prom > 0
   GROUP BY a.AlarmType ORDER BY COUNT(1)

但是cosmos db对于查询中的每个条件都希望使用别名,因此会出现错误。

答案 1 :(得分:0)

截至 2021 年 3 月,此功能仍不受支持。 Microsoft 的文档在此处定义了限制:https://docs.microsoft.com/en-us/azure/cosmos-db/sql-query-group-by

<块引用>

GROUP BY 子句不允许出现以下任何情况:

  • 别名属性或别名系统函数(在 SELECT 子句中仍然允许别名)
  • 子查询
  • 聚合系统函数(这些只允许在 SELECT 子句中)