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

Spotfire:在重复值列中对指定特定值求和

问题描述
  • 数据以Month Batch和PKG Name作为唯一分组标识
  • 需求:对每组(相同Month Batch+PKG Name),取Norm 1、Norm 2、Norm 3各自的最大值,再将这三个最大值求和得到Norm Sum,结果需与Goal列一致
  • 尝试过Sum( max([!] over (intersect([Month Batch], [PKG Name]))以及给三个Norm列加CASE语句分组求和,都没得到正确结果

解决方案

标准SQL写法(通用数据库)

方式1:窗口函数直接计算

直接用窗口函数分别取每组内三个Norm列的最大值,再相加:

SELECT 
  `Month Batch`,
  `PKG Name`,
  `Norm 1`,
  `Norm 2`,
  `Norm 3`,
  -- 分别取每组内各Norm列的最大值后求和
  MAX(`Norm 1`) OVER (PARTITION BY `Month Batch`, `PKG Name`) +
  MAX(`Norm 2`) OVER (PARTITION BY `Month Batch`, `PKG Name`) +
  MAX(`Norm 3`) OVER (PARTITION BY `Month Batch`, `PKG Name`) AS `Norm Sum`,
  `Goal`
FROM 你的表名;

方式2:先分组聚合再关联

如果窗口函数使用受限,可以先计算每组的最大值总和,再关联回原表:

WITH group_max_stats AS (
  SELECT 
    `Month Batch`,
    `PKG Name`,
    MAX(`Norm 1`) + MAX(`Norm 2`) + MAX(`Norm 3`) AS group_norm_sum
  FROM 你的表名
  GROUP BY `Month Batch`, `PKG Name`
)
SELECT 
  t.*,
  g.group_norm_sum AS `Norm Sum`
FROM 你的表名 t
JOIN group_max_stats g 
  ON t.`Month Batch` = g.`Month Batch` 
  AND t.`PKG Name` = g.`PKG Name`;

针对支持INTERSECT分区的BI工具(比如某些可视化平台)

你之前的写法错误在于把MAX嵌套进SUM里,正确的做法是对每个Norm列单独取组内最大值,再相加:

MAX([Norm 1]) OVER (INTERSECT([Month Batch], [PKG Name])) +
MAX([Norm 2]) OVER (INTERSECT([Month Batch], [PKG Name])) +
MAX([Norm 3]) OVER (INTERSECT([Month Batch], [PKG Name])) AS [Norm Sum]

核心逻辑是:每个Norm列的组内最大值独立计算,最后把三个最大值加总,而非对单个MAX结果再做SUM操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:05:09