【问题标题】:How to use an aggregate function on an array column in cosmos-db如何在 cosmos-db 中的数组列上使用聚合函数
【发布时间】:2021-06-26 15:20:10
【问题描述】:

我有一个宇宙物品,例如:-

{
  "id": "123,
  "meta": "ancdkjlerlh"
  "reason": [
        "reason1",
        "reason2"
    ],
  "status": "REJECTED"
}

我需要找出每个原因的项目数。

我尝试过这样的事情:-


SELECT count(1) as CountOfRejected, 
c.reason
FROM c
WHERE c.status= "REJECTED"
GROUP BY c.reason

将整个原因数组视为一个整体。 ARRAY_CONTAINS 方法需要在 GROUP BY 子句中使用第二个参数,我认为这一次需要一个原因。有没有办法像在 SQL 中那样在单个查询中做到这一点? 我想要这种格式的结果

         Reason | CountOfRejected |
        --------------------------
        Reason 1 | 10
        Reason 2 | 5
        Reason 3 | 7
      

【问题讨论】:

  • 如果您只想获取每个原因的项目数,您可以使用 ARRAY_LENGTH() 函数。试试这个 SQL:SELECT ARRAY_LENGTH(c.reason) AS CountOfRejected FROM c WHERE c.status= "REJECTED"
  • 我想要每个原因的计数,例如:原因 1 5 ,原因 2 -11 ,原因 3 -20
  • 我明白了。这是否达到您的要求? SELECT COUNT(r) as CountOfRejected,r as Reason FROM c JOIN r IN c.reason WHERE c.status= "REJECTED" GROUP BY r
  • @SteveZhao 非常感谢。这就像一个魅力!尽管docs.microsoft.com/en-us/azure/cosmos-db/sql-query-group-by,他们仍然不允许按结果排序
  • 是,Group by 目前不能与 Cosmos DB 中的 Order By 一起使用。

标签: azure-cosmosdb


【解决方案1】:

您可以使用以下 SQL:

SELECT 
    COUNT(r) as CountOfRejected,r as Reason 
FROM c JOIN r IN c.reason 
WHERE c.status= "REJECTED" 
GROUP BY r

结果:

[
    {
        "CountOfRejected": 1,
        "Reason": "reason3"
    },
    {
        "CountOfRejected": 1,
        "Reason": "reason2"
    },
    {
        "CountOfRejected": 2,
        "Reason": "reason1"
    }
]

【讨论】:

    猜你喜欢
    • 2019-11-19
    • 2022-12-17
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    相关资源
    最近更新 更多