我使用 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 归档订单时,请添加答案。
截至 2023 年 6 月,仍不支持此功能。 Microsoft 的文档在此处定义了限制:https://docs.microsoft.com/en-us/azure/cosmos-db/sql-query-group-by
GROUP BY 子句不允许以下任何一项:
- 对属性或系统函数进行别名(在 SELECT 子句中仍然允许使用别名)
- 子查询
- 聚合系统函数(仅允许在 SELECT 子句中使用)
我建议您创建一个用户定义的函数 [https://learn.microsoft.com/en-us/rest/api/cosmos-db/create-a-user-define-function][1]。您可以创建一个函数来对元素进行排序,然后在 SQL 查询中使用它。
我认为您可以通过在查询中使用 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 更喜欢查询中的每个条件使用别名,因此您会收到错误。