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

无需修改数据表,基于一对多关联SQL表获取聚合数据咨询

问题:无需修改数据表实现按real_name和region统计units总和?

需求背景

需要从region_data表按real_name和region分组统计units的总和,其中real_name需通过item_code关联item_lookup表获取。现有方案需要修改region_data表新增列,希望找到不修改原表的实现方式。

region_data表结构

item_codeshort_coderegionunits
B2513-70BrashEast18
C2692-59ScopeEast100
C2692-59ScopeNorth94
A6152-94ChunkSouth70
C2692-59ScopeWest40
A4891-91TopicEast65
............

注:item_code为关联item_lookup表的字段

item_lookup表结构

item_codereal_name
B2513-70Oven
C2692-59Oven
F6940-84Music
A4891-91Music
E6031-11Music
B2007-23Hotel
D6228-48Hotel
F3679-48Ladder
E3587-36Ladder
A6152-94Ladder

注:10个唯一item_code对应4个唯一real_name

现有修改数据表的方案

分为三步:

  1. 新增列:给region_data表添加rn列
-- 给region_data表添加列
ALTER TABLE region_data
ADD COLUMN rn text;
  1. 更新列数据:从item_lookup表同步real_name到rn列
-- 从item_lookup表更新region_data的rn列
update 
    region_data rd
set
    rn = lu.real_name
from
    item_lookup lu
where
    rd.item_code = lu.item_code;
  1. 生成汇总结果:按rn和region分组统计
-- 按real_name、region生成汇总表
select 
    rn,
    region, 
    sum(units)
from 
    region_data
group by
    rollup(rn, region)

核心疑问

是否可以通过关联item_code与real_name的查询,无需修改region_data表就能实现按real_name和region分组统计units总和的需求?


解决方案

当然可以,直接通过JOIN关联两张表后进行分组统计即可,无需修改原表。SQL语句如下:

select 
    lu.real_name,
    rd.region,
    sum(rd.units) as total_units
from 
    region_data rd
join 
    item_lookup lu on rd.item_code = lu.item_code
group by
    rollup(lu.real_name, rd.region)

说明

  • 使用JOIN将region_data与item_lookup通过item_code关联,直接获取对应的real_name
  • 分组时直接用lu.real_name替代原方案中的新增列rn
  • ROLLUP函数保持原逻辑,生成包含层级汇总的结果
  • 如果存在region_data中item_code在item_lookup中无匹配的情况,可根据需求改用LEFT JOIN,此时无匹配的real_name会显示为NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:35:11