在进行数据库查询中遇到如下问题:
数据库中有2个表:income,expend,
其中income中有一列i_num,列中有2条记录,数值均为1;
expend中有一列e_num,列中有3条记录,数值均为2;
我们记:
i_num的记录之和——a1;
i_num的记录行数——m1;
e_num的记录之和——a2;
e_num的记录行数——m2;
现在想将income中,列i_num的值相加,然后减去expend中e_num的记录之和,
即:a1-a2=(1+1)-(2+2+2)=-4,这是我们设想的结果,我写的select语句是:
select sum(i_num)-sum(e_num) from income,expend
但这样计算的结果为-6,经过研究,这个-6是通过下面这个公式得来的:
a1*m2-a2*m1=(1+1)*3-(2+2+2)*2=-6,
这个是很没有道理的啊!怎么会和行数有关系呢??
百思不得其解!
然后改select语句如下后,结果就正确了:
select (select sum(i_num) from income)-(select sum(e_num) from expend)
想请问各位高人们这是为什么呢?
谢了谢了!!
你先把2表关联了,实际上是求下面记录的sum
select i_num,e_num from income,expend
i_num e_num
1 2
1 2
1 2
1 2
1 2
1 2
select sum(i_num)-sum(e_num) from income,expend
这样当然是-6啦
select a1*m2-a2*m1
from(select a1=sum(i_num),m1=count(*) from income)a,
(select a2=sum(e_num),m2=count(*) from expend)b
declare @sum_i_num integer
declare @sum_e_num integer
select @sum_i_num =sum(i_num) from income
select @sum_e_num = sum(e_num) from expend
select @sum_i_num - @sum_e_num