如何在重复编号场景下,不分组显示总金额求和结果?
问题描述
现有两张数据库表table_a和table_b,数据如下:
table_a table_b desc amount ID vcref ID banana 2.00 101 VC10001 101 apple 3.00 101 VC10001 101 orange 5.00 101 VC10003 101
执行以下SQL语句:
select sum(a.amount),b.vcref from table_a a,table_b b where a.ID=b.ID group by b.vcref;
得到结果:
result 20.0 VC10001 10.0 VC10003
现在希望得到如下格式的结果:
result 10.0 VC10001 10.0 VC10001 10.0 VC10003
需求是:每个table_b的行都显示table_a中amount的总求和值,而非分组后的求和结果,请问是否可以实现该需求?
解决方案
当然可以实现。核心就是先算出table_a里amount的全局总和,再把这个总和和table_b做关联,不用按vcref分组,这样table_b的每一行都会显示这个总求和值。
给你两种常用的写法:
写法一:子查询计算对应ID的总和
select (select sum(amount) from table_a where ID = b.ID) as total_amount, b.vcref from table_b b;
写法二:交叉连接关联总和结果
select total.total_amount, b.vcref from table_b b cross join (select sum(amount) as total_amount from table_a where ID = 101) as total where b.ID = 101;
补充说明
这两种写法都会先计算table_a中ID为101的所有amount总和(2+3+5=10),然后把这个值对应到table_b的每一行上,正好得到你要的结果。如果你的数据里有多个不同的ID,写法一的适配性更强,子查询里的ID = b.ID会自动匹配table_b每行对应的ID,算出对应ID的总和。
内容的提问来源于stack exchange,提问作者Daniel Hoong
相关产品推荐
相关产品推荐

