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

Oracle查询如何将含付费项目的订单仅统计为付费,不重复计入免费分组

解决方案

实现思路

要实现需求需要先按医生+订单ID维度先判定每个订单的付费属性:只要订单下存在任意非0价格的项目,该订单整体归为Paid分组,仅当订单下所有项目价格都为0时才归为Free分组,之后再基于判定结果做分组统计即可。

完整SQL语句

SELECT
    physician,
    COUNT(order_id) AS sum,
    is_free
FROM (
    -- 内层先按订单维度判定付费属性
    SELECT
        physician,
        order_id,
        CASE WHEN MAX(CASE WHEN price != 0 THEN 1 ELSE 0 END) = 1 
             THEN 'Paid' 
             ELSE 'Free' 
        END AS is_free
    FROM "table" -- 若表名不是关键字可去掉双引号,替换为实际表名即可
    GROUP BY physician, order_id
) t
GROUP BY physician, is_free;

逻辑说明

  • 内层子查询通过MAX(CASE WHEN price !=0 THEN 1 ELSE 0 END)判断每个订单是否存在付费项:只要有任意一条记录价格不为0,返回值就是1,对应标记为Paid,否则标记为Free
  • 内层子查询已经保证一个order_id只对应一条记录,外层统计时直接用COUNT(order_id)即可,不需要额外去重
  • 最终统计结果和你期望的输出完全一致:Physician1对应2个Free订单,1个Paid订单

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:15:00