You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CosmosDB NoSQL API实现不同状态报价的订单去重计数问题

问题:统计不同报价状态的去重订单数

需要统计拥有ACTIVE和VOID状态报价的订单总数,要求去重计数——若某订单的报价列表中有多个同状态的报价,该订单在对应状态的计数中仅计为1次。

数据模型

  • 容器:order
    包含字段:
    • orderId(字符串类型)
    • orderStatus(字符串类型)
    • dateCreatedStamp(LocalDateTime类型)
    • dateModifiedStamp(LocalDateTime类型)
    • quotes(Quote对象列表)
  • Quote对象字段:
    • quoteId(字符串类型)
    • quoteStatus(字符串类型,可选值:ACTIVE、VOID)
    • quoteDateCreatedStamp(LocalDateTime类型)
    • quoteDateModifiedStamp(LocalDateTime类型)

原查询问题

原查询未实现去重,当一个订单包含多个同状态报价时会重复计数(例如某订单有2个VOID报价,VOID状态计数为2而非1):

SELECT q.quoteStatus, COUNT(or)
FROM order or
JOIN q IN or.quotes
WHERE q.quoteStatus IN ("ACTIVE", "VOID")
GROUP BY q.quoteStatus

解决方案

方案1:子查询+DISTINCT

先通过子查询生成唯一的orderId与quoteStatus组合,再按状态汇总计数:

SELECT grouped.quoteStatus, COUNT(grouped.orderId)
FROM (
    SELECT DISTINCT or.orderId, q.quoteStatus
    FROM order or
    JOIN q IN or.quotes
    WHERE q.quoteStatus IN ("ACTIVE", "VOID")
) grouped
GROUP BY grouped.quoteStatus

方案2:直接使用COUNT(DISTINCT)

更简洁的写法,直接在分组时对orderId去重计数:

SELECT q.quoteStatus, COUNT(DISTINCT or.orderId)
FROM order or
JOIN q IN or.quotes
WHERE q.quoteStatus IN ("ACTIVE", "VOID")
GROUP BY q.quoteStatus

两种方案都能实现需求,方案2更简洁高效,推荐使用。

内容的提问来源于stack exchange,提问作者TheCuriousCat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:35:26