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

如何在PostgreSQL中基于不同行值为Category变量创建新层级

PostgreSQL实现方案

你要的需求可以直接用PostgreSQL原生的UNION ALL结合条件聚合实现,不需要创建辅助表,逻辑如下:

  • 第一部分直接返回原始表的所有原有数据,保留已有的Category分类
  • 第二部分按Date + Persona分组,单独计算每个分组下新增分类的Var_1、Var_2值,新增分类的名称可以自定义,示例里我们叫Non-App(对应All减App的计算规则)
  • 两部分结果合并即可得到包含新增分类的完整数据集

对应的查询代码如下:

-- 假设你的原始表名为category_data,可替换为实际表名
SELECT * FROM category_data

UNION ALL

-- 生成新增的Non-App分类行
SELECT
    Date,
    Persona,
    'Non-App' AS Category,
    -- 计算Var_1:同组All分类的Var_1减去App分类的Var_1
    MAX(CASE WHEN Category = 'All' THEN Var_1 END) - MAX(CASE WHEN Category = 'App' THEN Var_1 END) AS Var_1,
    -- 计算Var_2:规则同上
    MAX(CASE WHEN Category = 'All' THEN Var_2 END) - MAX(CASE WHEN Category = 'App' THEN Var_2 END) AS Var_2
FROM category_data
GROUP BY Date, Persona

-- 可选:添加排序规则方便查看结果
ORDER BY Date, Persona, Category;

你提到的样例示意图如下:
样例示意图

如果需要把新增的分类数据持久化写入原表,只需要把上述查询的结果用INSERT INTO语句写入即可;如果不需要物理存储,也可以把上述查询封装成视图,查询视图时会自动生成新增的分类数据,无需额外维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:06:01