如何根据 ComosDb 中的聚合函数结果对查询结果进行排序?
Posted
技术标签:
【中文标题】如何根据 ComosDb 中的聚合函数结果对查询结果进行排序?【英文标题】:How to order results of a query by the results of an aggregate function in ComosDb? 【发布时间】:2020-03-17 07:00:06 【问题描述】:我使用 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 归档订购时,请添加答案。
【问题讨论】:
a.AlarmType != null
应该是 a.AlarmType IS NOT NULL
。
你确定你说的是 CosmosDB SQL 而不是 TransactSQL for SQL Server 吗?
我说的是一般的 SQL。 (截至 2021 年 10 月,此功能仍不受支持。 Microsoft 的文档在这里定义了限制:https://docs.microsoft.com/en-us/azure/cosmos-db/sql-query-group-by
GROUP BY 子句不允许以下任何一项:
别名属性或别名系统函数(在 SELECT 子句中仍然允许别名) 子查询 聚合系统函数(仅允许在 SELECT 子句中使用)
【讨论】:
【参考方案2】:我认为您可以通过在查询中使用 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 更喜欢查询中每个条件的别名,因此您得到的错误。
【讨论】:
不,我在尝试嵌套查询之前尝试过这个,错误是:存在 GROUP BY 时不支持“ORDER BY”。以上是关于如何根据 ComosDb 中的聚合函数结果对查询结果进行排序?的主要内容,如果未能解决你的问题,请参考以下文章
26《MySQL 教程》聚合函数(聚合函数 MIN、MAX)
您的查询不包含表达式“未结金额”作为聚合函数的一部分 - MS Access