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

问题描述 投票:0回答:3

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

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

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

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 归档订单时,请添加答案。

sql azure sql-order-by azure-cosmosdb aggregate-functions
3个回答
8
投票

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

GROUP BY 子句不允许以下任何一项:

  • 对属性或系统函数进行别名(在 SELECT 子句中仍然允许使用别名)
  • 子查询
  • 聚合系统函数(仅允许在 SELECT 子句中使用)

0
投票

我建议您创建一个用户定义的函数 [https://learn.microsoft.com/en-us/rest/api/cosmos-db/create-a-user-define-function][1]。您可以创建一个函数来对元素进行排序,然后在 SQL 查询中使用它。


-4
投票

我认为您可以通过在查询中使用 order by 来实现结果。就像下面这样。

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

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 更喜欢查询中的每个条件使用别名,因此您会收到错误。

© www.soinside.com 2019 - 2024. All rights reserved.