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

PostgreSQL如何将未定义分组数据聚合到指定组(无需多子查询)

PostgreSQL 分组统计:将指定类别聚合到Other组的优化实现

数据表结构与测试数据

首先修正原数据表创建语句(PostgreSQL中无number类型,替换为numeric):

CREATE TABLE DataTable (
    name text,
    value numeric
);

INSERT INTO DataTable VALUES
('A', 1),('A', 2),('B', 3),('Other', 5),('C', 1);

需求说明

需要按A、B、Other分组统计value的总和,其中C类别需合并到Other组,预期输出:

Name  | sum
A     |  3
B     |  3
Other |  6

原实现使用两个子查询,但业务查询包含多关联与聚合时,重复代码会导致维护困难,现提供无需多子查询的实现方案。

优化实现方案

使用CASE语句在分组前对name字段进行重映射,直接完成分组聚合,无需嵌套子查询:

SELECT
    CASE
        WHEN name IN ('A', 'B') THEN name
        ELSE 'Other'
    END AS "Name",
    SUM(value) AS "sum"
FROM DataTable
GROUP BY
    CASE
        WHEN name IN ('A', 'B') THEN name
        ELSE 'Other'
    END;

简化写法

PostgreSQL支持按SELECT列表的位置分组,可进一步简化代码,避免重复CASE逻辑:

SELECT
    CASE
        WHEN name IN ('A', 'B') THEN name
        ELSE 'Other'
    END AS "Name",
    SUM(value) AS "sum"
FROM DataTable
GROUP BY 1;

方案说明

  • 通过CASE语句将非A、B的所有类别(包括C和原Other)统一映射为Other
  • 直接基于映射后的字段分组求和,代码简洁且避免重复逻辑,后续维护只需修改CASE中的条件即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:45:39