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

SQL技术问题:如何仅对MIN(rate)行的adults字段减2?

解决方案:针对最小rate行调整adults字段

要实现仅对MIN(rate)对应的行的adults字段减2,其余行保持不变,你可以通过窗口函数获取全局最小rate,再结合CASE条件判断来调整adults的计算值。下面是修改后的查询语句:

SELECT 
    rate,
    SUM(nights) AS nights,
    rate * SUM(nights) AS subtotal, -- 由于GROUP BY rate,SUM(rate)等价于当前组的rate值
    (rate * SUM(nights)) * MIN(tax) AS tax,
    CASE 
        WHEN rate = MIN(rate) OVER() THEN SUM(adults) - 2
        ELSE SUM(adults)
    END AS adults,
    SUM(fee) AS fee,
    ((rate * SUM(nights)) * MIN(tax)) + SUM(fee) AS total 
FROM table 
WHERE `group` = @group_code -- 注意group是SQL保留关键字,需用反引号包裹避免语法错误
GROUP BY rate

关键思路说明:

  • 窗口函数MIN(rate) OVER():这个函数会在整个分组后的结果集中计算最小的rate值,让每一行都能获取到全局最小rate,无需额外子查询关联。
  • CASE条件判断:检查当前行的rate是否等于全局最小rate,如果是,就对SUM(adults)减去2;否则保持原求和值不变。
  • 优化小细节:原查询中SUM(rate)因为已经按rate分组,所以等价于当前组的rate值,直接用rate代替更简洁。

验证示例结果:

针对你提供的示例数据,修改后的查询会输出:

ratenightssubtotaltaxadultsfeetotal
0.00140.000.0019105105.00
154.0022634804.005373.0414170540882.04
254.0061524.00235.274201779.27

可以看到,rate=0.00(全局最小rate)的行的adults从21变成了19,其余行的adults值保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:55:04