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

SQL查询实现:关联两张表按订单+商品维度分配计算可发数量

SQL 订单商品分配量计算实现方案

实现思路

  • 第一步:关联订单商品需求表(表A)和订单总可分配量表(表B),获取每个订单对应的总可分配额度
  • 第二步:用开窗函数计算同一订单内按商品排序的累计需求数量,同时获取截至上一个商品的累计需求值
  • 第三步:基于累计值判断当前商品可分配数量:
    • 若截至上一个商品的累计需求已经大于等于订单总可分配量,当前商品可发量为0
    • 否则取当前商品需求数量和剩余可分配量(总可分配量-上一个累计需求)的较小值

适用范围

支持MySQL 8.0+、PostgreSQL、Spark SQL、Hive等所有支持窗口函数的SQL引擎。

具体SQL代码

WITH a_with_cum AS (
    SELECT 
        a.`order`,
        a.item,
        a.qty AS require_qty,
        b.qty AS total_alloc_qty,
        -- 计算当前订单下按指定规则排序的累计需求,包含当前商品
        SUM(a.qty) OVER (PARTITION BY a.`order` ORDER BY a.item) AS cum_require,
        -- 计算当前订单下截至上一个商品的累计需求,第一个商品默认取0
        COALESCE(SUM(a.qty) OVER (PARTITION BY a.`order` ORDER BY a.item ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING), 0) AS prev_cum_require
    FROM table_a a
    LEFT JOIN table_b b ON a.`order` = b.`order`
)
SELECT 
    `order`,
    item,
    CASE 
        WHEN prev_cum_require >= total_alloc_qty THEN 0
        ELSE LEAST(require_qty, total_alloc_qty - prev_cum_require)
    END AS ordered_Qty
FROM a_with_cum
ORDER BY `order`, item;

注意事项

如果你的表A中商品排序不是按item字段升序,只需要修改窗口函数中ORDER BY后的排序字段即可,比如有专门的排序号字段就替换为对应字段。
代入示例数据运行后输出结果和需求完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:15:03