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

Oracle SQL查询中如何新增列实现Vikt与AntalOrder两值相除

Oracle SQL修改方案

你可以通过两种方式实现新增计算列新增,Oracle不支持在同层级SELECT中直接引用别名,以下是可直接运行的实现:

方案1:直接复用聚合表达式(性能最优,写法最简单)

select 
    O08T1.pickdate,
    O08T1.divcode,
    sum(O08T1.calcwght) as Vikt,
    sum(O08T1.calcvol) as Volym,
    count(O08T1.ordno) as AntalOrder,
    -- 新增第五列,内置除零异常处理
    sum(O08T1.calcwght) / NULLIF(count(O08T1.ordno), 0) as ViktPerOrder
from O08T1  
group by O08T1.pickdate, O08T1.divcode
order by Pickdate DESC
  • 用NULLIF(count(O08T1.ordno), 0)处理除数为0的场景,当订单数为0时会自动返回NULL,避免触发除以零报错

方案2:CTE写法(可读性更高)

如果希望直接引用别名可以用公共表达式实现:

WITH order_agg AS (
    select 
        O08T1.pickdate,
        O08T1.divcode,
        sum(O08T1.calcwght) as Vikt,
        sum(O08T1.calcvol) as Volym,
        count(O08T1.ordno) as AntalOrder
    from O08T1  
    group by O08T1.pickdate, O08T1.divcode
)
SELECT 
    pickdate,
    divcode,
    Vikt,
    Volym,
    AntalOrder,
    Vikt / NULLIF(AntalOrder, 0) as ViktPerOrder
FROM order_agg
order by Pickdate DESC

内容的提问来源于stack exchange,提问作者Filip Skagerström

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 15:36:04