azure 如何在ComosDb中按照聚合函数的结果对查询结果进行排序?

mlmc2os5  于 2022-11-25  发布在  其他
关注(0)|答案(2)|浏览(108)

我使用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归档订购时添加答案。

yacmzcpb

yacmzcpb1#

截至2022年11月,该功能仍不受支持。来自微软的文档在此处定义了限制:https://docs.microsoft.com/en-us/azure/cosmos-db/sql-query-group-by
GROUP BY子句不允许下列任何一项:

  • 别名属性或别名系统函数(在SELECT子句中仍允许别名)
  • 子查询
    *聚合系统函数(只允许在SELECT子句中使用)
vfh0ocws

vfh0ocws2#

我认为你可以通过在查询中使用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数据库在查询中的每个条件都首选别名,因此您会得到错误。

相关问题