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

能否用CASE语句实现同日期分组的百分比计算?逻辑是什么?

可以用CASE语句实现,需配合窗口函数

当然可以用CASE语句完成这个需求,但单独的CASE只能处理行内逻辑,我们需要结合窗口函数来获取每个日期(Column A)对应的基准分母值,具体逻辑和SQL示例如下:

核心逻辑

  1. 确定每个日期分组的基准分母:从你的规则来看,分母是该日期下Column B = 'M0'对应的Column C最大值(比如2022-01-02的分母是102,是当天所有M0记录里的最大C值)。
  2. 用CASE语句配合窗口函数,把这个基准分母应用到同日期的所有行,再计算百分比。

具体SQL示例

SELECT 
    ColumnA,
    ColumnB,
    ColumnC,
    -- 计算百分比新列,ROUND函数用于控制小数位数,可按需调整
    ROUND((ColumnC * 100.0) / 
        CASE 
            -- 获取当前日期下M0的最大C值作为分母
            WHEN MAX(CASE WHEN ColumnB = 'M0' THEN ColumnC END) OVER (PARTITION BY ColumnA) IS NOT NULL
            THEN MAX(CASE WHEN ColumnB = 'M0' THEN ColumnC END) OVER (PARTITION BY ColumnA)
            ELSE 1 -- 防止分母为NULL/0报错,可根据业务调整默认值
        END, 2) AS 百分比新列
FROM your_table;

逻辑拆解

  • MAX(CASE WHEN ColumnB = 'M0' THEN ColumnC END) OVER (PARTITION BY ColumnA):通过窗口函数按日期分组,筛选出每组中M0对应的C值并取最大值,这个值就是该日期所有行共用的分母。
  • 外层CASE用来处理异常场景:如果某个日期没有M0记录,给一个默认分母避免除以0报错。
  • 最终通过ColumnC * 100 / 分母计算出百分比,满足你表格里的计算规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:09:21