一个SQL问题,请大家看看

来源:百度知道 编辑:UC知道 时间:2024/06/09 11:19:12
表A

id aa
-------------------------- ----------------------------------
1 1000

表B
id aid bb
------------- ----------------- -------------------------------
1 1 500
2 1 300

select sum(aa),sum(bb) from A inner join B on A.id=B.aid
结果

------------- ---------------------
2000 800

而我想像中的是如下结果

------------- ---------------------
1000 800

请大家说说怎么办,当然大家不要告诉我用这个语句,
select aa,sum(bb) from A inner join B on A.id=B.aid
因为这只是实际问题的一个精简例子,将表A中的aa求和,请大家指点一下
我如果得到我想要的结果

select * from (select id,sum(aa) from A group by id)AA inner join (select aid,sum(bb) from B group by aid)BB on AA.id=BB.aid

A inner join B on A.id=B.aid 后的临时表为:
id aa bb
-------------
1 1000 500
1 1000 300

A.id=B.aid
面B表有两个id=aid,当然累加起来了。
select sum(A.aa),sum(B.bb) from A inner join B on A.id=B.aid 这句应该行。sum(a.aa)指定统计A表的,

根据您的问题描述 , 推测您的SQL查询目的只是为了汇总B.bb字段 , 而针对A.aa字段 , 只需要直接显示出与aid对应的A.aa字段值就可以了

建议通过Group by的方式 , 解决您的问题 , 具体SQL如下

select B.aid , A.aa ,sum(bb) from A inner join B on A.id=B.aid group by B.aid , A.aa

之所以多查询B.aid和A.aa字段 ,并按这两个字段进行分组
原因是 , 若A表和B表中的资料更复杂 , 分别如下时 , 也能保证查询结果的正确性 , 具体如下 :

表A

id aa
-------------------------- ----------------------------------
1 1000
2 1000
3 2000

表B
id aid bb
------------- ----------------- -------------------------------
1 1 500
2 1 300
3 2 500
4 2 300