Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询:要计算不同表中两列之间的差异吗?_Sql_Database_Oracle_Subquery - Fatal编程技术网

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;