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

Oracle中使用窗口函数按program分区求和contractrate/rate是否可行?

当然可以实现!

你完全可以用窗口函数来按program分区,计算每个分区内contractrate/rate的求和值。下面是具体的实现步骤和示例:

1. 原数据表

先把你提供的数据整理成更清晰的表格:

idratecontractrateprogram
1100100low
210050low
3250250Med
3250200Med
4500500High
5500400High

2. 核心SQL语句

这里以标准SQL为例(不同数据库语法略有差异,但核心逻辑一致):

SELECT
    id,
    rate,
    contractrate,
    program,
    -- 计算当前行所属program分区的contractrate/rate总和
    SUM(contractrate / rate) OVER (PARTITION BY program) AS total_ratio
FROM
    your_table_name;

3. 语句解释

  • SUM(contractrate / rate):先计算每一行的contractrate与rate的比值,再对这些比值求和
  • OVER (PARTITION BY program):指定按program字段进行分区,求和操作只会在同一个program的组内执行

4. 执行结果示例

运行上述SQL后,你会得到如下结果:

idratecontractrateprogramtotal_ratio
1100100low1.5
210050low1.5
3250250Med1.8
3250200Med1.8
4500500High1.8
5500400High1.8

(计算说明:low分区的比值是100/100 + 50/100 = 1 + 0.5 = 1.5;Med分区是250/250 + 200/250 = 1 + 0.8 = 1.8;High分区是500/500 + 400/500 = 1 + 0.8 = 1.8)

小提示

如果你的数据库对整数除法有特殊处理(比如MySQL中整数相除会直接取整),可以先将字段转为浮点型再计算,比如写成SUM(CAST(contractrate AS FLOAT)/rate)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:00:59