7速自行车最佳档位:一个SQL问题,请大家看看

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/19 19:20:06
表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
5 3 100
6 3 200

正确的查询结果是

aid aa sum(bb)
------------- ---------------------
1 1000 800
2 1000 800
3 2000 300

能把问题说详细点吗?
我也和楼上的一样。。

看了半天也没弄清楚你想干什么