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

如何使用GROUP BY合并指定行,实现部分国家金额合并统计?

当然没问题!咱们可以通过先统一国家分组、再聚合的方式实现你要的结果。

原始数据

IDCOUNTRYAMOUNT
1USA100
2USA100
3USA100
4FRA100
5ITA100
6ITA100
7FRA100

目标结果

IDCOUNTRYAMOUNT
1USA300
2EUR400

实现方案

核心思路是先把FRA和ITA映射为统一的EUR,再按这个新的分组字段聚合金额,最后生成连续的ID。这里提供两种适配不同数据库版本的写法:

方法1:支持窗口函数的数据库(如PostgreSQL、MySQL 8+、SQL Server)

SELECT
    ROW_NUMBER() OVER (ORDER BY grouped_country) AS ID,
    grouped_country AS COUNTRY,
    SUM(AMOUNT) AS AMOUNT
FROM (
    SELECT
        CASE 
            WHEN COUNTRY IN ('FRA', 'ITA') THEN 'EUR'
            ELSE COUNTRY
        END AS grouped_country,
        AMOUNT
    FROM your_table_name -- 替换成你的实际表名
) AS mapped_data
GROUP BY grouped_country
ORDER BY ID;

方法2:不支持窗口函数的老版本数据库(如MySQL 5.x)

SET @id = 0;
SELECT
    (@id := @id + 1) AS ID,
    grouped_country AS COUNTRY,
    SUM(AMOUNT) AS AMOUNT
FROM (
    SELECT
        CASE 
            WHEN COUNTRY IN ('FRA', 'ITA') THEN 'EUR'
            ELSE COUNTRY
        END AS grouped_country,
        AMOUNT
    FROM your_table_name -- 替换成你的实际表名
) AS mapped_data
GROUP BY grouped_country
ORDER BY grouped_country;

代码说明

  • 内层子查询用CASE WHEN完成国家分组的映射,把需要合并的FRA和ITA统一转为EUR;
  • 外层查询按映射后的国家分组,用SUM()计算每组的总金额;
  • ID字段通过窗口函数ROW_NUMBER()或变量自增的方式生成,保证结果里的ID是连续的序号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:06:40