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

如何基于查询预定义字段名实现可扩展的累计求和?

动态生成分类统计列并实现可扩展求和逻辑

原代码通过Jinja2循环实现了分类变量的统计列生成,自动将分类名转换为total_xxx格式的列名,并对对应AMOUNT字段求和。现在要新增一个可扩展的总和列,自动计算所有生成的统计列之和,无需手动修改求和表达式。

修改后的完整代码

{% set columns = ("transfer out", "transfer in", "fee") %}
SELECT
  -- 原有循环生成分类统计列的逻辑
  {% for column in columns %}
    , round(
      sum(case when table.variable = '{{ column }}' then table.amount else 0 end)
      , 2) as total_{{ column|replace(" ", "_")|replace("-", "_") }}s
  {% endfor %}
  -- 新增循环生成求和逻辑
  , round(
    {% for column in columns %}
      total_{{ column|replace(" ", "_")|replace("-", "_") }}s
      {% if not loop.last %} + {% endif %}
    {% endfor %}
    , 2) as total_sum
FROM your_table
GROUP BY -- 按需添加分组字段,无分组需求可删除此行

代码说明

  1. 分类统计列生成:保留原有逻辑,遍历columns列表为每个分类生成求和列,列名自动替换空格/连字符为下划线,添加total_前缀与s后缀。
  2. 可扩展求和逻辑:
    • 再次遍历columns列表,拼接所有生成的统计列名,用+连接
    • 通过loop.last判断是否为最后一个元素,避免多余的+符号
    • 用round统一保留两位小数,最终生成total_sum列

效果示例

当columns列表新增元素(如"refund")时,代码会自动生成total_refunds列,并将其纳入total_sum的计算中,无需手动修改求和表达式。生成结果示例:

columnamount
total_transfer_outs-90
total_transfer_ins100
total_fees-10
total_refunds5
total_sum5

内容的提问来源于stack exchange,提问作者D. Bryant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:25:38