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

Denodo SQL中如何用market_value总和计算每行Contribution列?

Denodo下计算全局总和实现Contribution列的SQL方案

问题背景

现有数据库表包含ID、Classification、emissions、market_value字段,数据如下:

IDClassificationemissionsmarket_value
1Type A0.045.67
2Type B0.016.12

需要新增Contribution列,计算公式为:(emissions * market_value) / SUM(market_value),其中SUM(market_value)是全局总和,预期结果如下:

IDClassificationemissionsmarket_valuecontribution
1Type A0.045.670.192
2Type B0.016.120.005

此前尝试两种方法失败:

  • SELECT子句嵌套子查询取总和,Denodo不支持该写法;
  • GROUP BY分组计算时,SUM(market_value)仅返回分组内总和,无法得到全局值。

可行SQL实现方法

方法1:使用窗口函数(推荐)

Denodo支持窗口函数,通过SUM(market_value) OVER ()可直接获取全局总和,无需分组:

SELECT 
    ID,
    Classification,
    emissions,
    market_value,
    ROUND((emissions * market_value) / SUM(market_value) OVER (), 3) AS contribution
FROM 
    your_table_name;

说明:OVER ()表示窗口范围覆盖整个数据集,SUM(market_value)会计算全局总和,用ROUND函数保留三位小数匹配预期结果。

方法2:交叉连接全局总和子查询

如果窗口函数存在兼容问题,可通过交叉连接单独计算全局总和的子查询实现:

SELECT 
    t.ID,
    t.Classification,
    t.emissions,
    t.market_value,
    ROUND((t.emissions * t.market_value) / total.total_market, 3) AS contribution
FROM 
    your_table_name t
CROSS JOIN 
    (SELECT SUM(market_value) AS total_market FROM your_table_name) total;

说明:子查询先算出全局market_value总和,再通过交叉连接将该值与原表每一行关联,完成计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:20:11