SQL阶梯定价计算问题:如何按购买数量匹配单价计算总价
电商阶梯定价SQL查询修正
你的问题出在没对阶梯数量做排序,TOP 1直接取了表中第一条记录(QTY=1对应的12.50),所以算出62.50,而非预期的55.00。
要实现正确的阶梯定价匹配,核心逻辑是:找到当前SKU下,购买数量大于等于阶梯数量的所有记录,然后取其中最大的那个阶梯数量对应的单价(阶梯定价规则是买得越多单价越低,最大的符合条件的阶梯就是对应单价)。
修正后的SQL代码
DECLARE @sku nvarchar(50) DECLARE @qty int SET @sku = 'SKU-1' SET @qty = 5 -- 方案1:筛选符合条件的阶梯,按QTY倒序取第一条 SELECT TOP 1 (price * @qty) AS total_price FROM global_tier_pricing WHERE sku = @sku AND qty <= @qty ORDER BY qty DESC -- 方案2:用子查询找到匹配的最大阶梯数量,再关联取单价 SELECT (gtp.price * @qty) AS total_price FROM global_tier_pricing gtp WHERE gtp.sku = @sku AND gtp.qty = ( SELECT MAX(qty) FROM global_tier_pricing WHERE sku = @sku AND qty <= @qty )
测试验证
- 当
@qty=3时,匹配QTY=1的阶梯,单价12.50,总价37.50 - 当
@qty=5时,匹配QTY=5的阶梯,单价11.00,总价55.00 - 当
@qty=12时,匹配QTY=10的阶梯,单价10.00,总价120.00 - 当
@qty=15时,匹配QTY=15的阶梯,单价8.50,总价127.50
这两种方案都能准确匹配对应阶梯的单价,不需要复杂的CASE或BETWEEN语句。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

