多表关联聚合异常:SUM函数未按日期和零售名称分组统计
关联表SUM聚合未按日期和零售名称拆分的问题
我在关联两张表并使用SUM函数时遇到问题:聚合结果返回全周期的总营收,并未按关联表中的Date和Retailname字段拆分统计。我期望得到按日期和零售名称划分的各门店营收,尝试过在SELECT子句中使用相关子查询,但结果仍相同。
当前使用的SQL语句
Select Date, Retailname, sum(Revenue) From table1 t1 Join table2 t2 On t1.primarykey = t2.primarykey Group by Date, Retailname
当前查询结果
Date Retailname Revenue X Name1 224 X Name2 224 X Name3 224 X Name4 224
期望得到的结果
Date Retailname Revenue X Name1 25 X Name2 75 X Name3 96 X Name4 28
可能的原因及解决办法
- 关联导致数据重复计算:如果两张表是一对多关联(比如一条主表记录对应多条从表记录),关联后会生成重复行,SUM时会把重复的Revenue累加多次,最终得到总营收而非单门店数据。解决思路是先对Revenue所在的表做聚合,再关联另一张表:
假设Revenue存储在table1中:
若Revenue存储在table2中:Select t2.Date, t2.Retailname, t1.total_revenue From ( Select primarykey, sum(Revenue) as total_revenue From table1 Group by primarykey ) t1 Join table2 t2 On t1.primarykey = t2.primarykey Group by t2.Date, t2.RetailnameSelect t1.Date, t1.Retailname, t2.total_revenue From table1 t1 Join ( Select primarykey, sum(Revenue) as total_revenue From table2 Group by primarykey ) t2 On t1.primarykey = t2.primarykey Group by t1.Date, t1.Retailname - 分组字段存在异常:检查Date和Retailname字段的来源,若两张表都有同名字段,需明确指定表别名(比如
t1.Date或t2.Date),避免取到错误字段导致分组失效。另外当前结果里的X.可能是Date字段存在格式差异(比如多余的点或空格),也会影响分组逻辑。 - 原始表存在重复主键:检查table1或table2中是否有重复的primarykey记录,导致关联后数据被多次统计。可以执行
SELECT primarykey, COUNT(*) FROM table1 GROUP BY primarykey HAVING COUNT(*) > 1(或替换为table2)排查重复数据。
内容的提问来源于stack exchange,提问作者pavel janci
相关产品推荐
相关产品推荐

