SQL查询:要计算不同表中两列之间的差异吗?
我想计算两个不同表中两个不同列之和之间的差值。以下是我所拥有的:SQL查询:要计算不同表中两列之间的差异吗?,sql,database,oracle,subquery,Sql,Database,Oracle,Subquery,我想计算两个不同表中两个不同列之和之间的差值。以下是我所拥有的: SELECT sum(amount) FROM variable_in where user_id='111111' minus SELECT sum(amount) FROM variable_out where user_id='111111' 当我这样做时,我只得到第一个查询结果的输出。如何让它执行两个查询(针对in和out表),以及如何让它减去amount列的变量_out total?因为它们都是正整数 提前谢谢!与我的
SELECT sum(amount)
FROM variable_in
where user_id='111111'
minus
SELECT sum(amount)
FROM variable_out
where user_id='111111'
当我这样做时,我只得到第一个查询结果的输出。如何让它执行两个查询(针对in和out表),以及如何让它减去amount列的变量_out total?因为它们都是正整数
提前谢谢!与我的问题相比,我看到的大多数其他技巧都过于复杂 将查询从子句移动到
并使用-
如何:
SELECT in_amount - out_amount
FROM (SELECT sum(amount) as in_amount
FROM variable_in
WHERE user_id = '111111'
) i CROSS JOIN
(SELECT sum(amount) as out_amount
FROM variable_out
WHERE user_id = '111111'
) o;
您的查询将设置操作“减号”与数字运算符-
混淆。诚然,他们的名字是一样的。但是减号
适用于集合,而不是数字
我应该指出,您可以将嵌套查询放在FROM
子句中,并使用类似数字的结果(“标量子查询”):
这很简单
select
(select sum(amount) from variable_in where user_id='111111')
-
(select sum(amount) from variable_out where user_id='111111')
as amount;
如果问题中的查询运行,那么您没有使用MySQL,因此我删除了标记。您知道为什么您的尝试没有成功吗?“减”是一种集合运算(如“集合论”),而不是算术运算。您的第一个子查询返回一行和一列数字数据类型。第二个查询还返回一行,重要的是,返回一列数据类型。(如果列数或列的数据类型不匹配,则会出现编译错误)。然后,由于第二个查询中的行与第一个查询中的行不同,所以集合论的“减号”只保留第一行并返回它。我猜您是指第二部分中的“SELECT子句”。您忘了删除o
别名。我可以让查询正常运行!感谢您的帮助,我使用了戈登在阅读回复之前提到的相同方法!谢谢大家:数据第二个版本也必须从中选择(通常是从双版本)。@mathguy::在mssql中,您不需要FROM@jmoreno-甲骨文怎么样?请查看标记。@mathguy:我相信DB2和oracle有一个虚拟表,其中有一行用于相同的目的,称为DUAL。@mathguy:该标记是后来添加的,答案不需要修改就可以使用。@jmoreno-也许,我不确定这就是我没有投反对票的原因。我注意到解决方案仍然没有得到纠正。
select
(select sum(amount) from variable_in where user_id='111111')
-
(select sum(amount) from variable_out where user_id='111111')
as amount;