我正在尝试编写查询,但结果错误。让我与您分享详细信息。我有两张桌子。首先是tbl1
:
Id | NId | value | VID
-----+-------+--------+-----
170 | 44 | 5 | 12
170 | 44 | 2 | 12
170 | 44 | 1 | 12
170 | 44 | 1 | 12
170 | 44 | 1 | 12
170 | 44 | 1 | 12
第二个表是tbl2
Id | NId | value | VID
-----+-------+--------+-----
170 | 44 | 5 | 12
170 | 44 | 4 | 12
170 | 44 | 5 | 12
170 | 44 | 5 | 12
170 | 44 | 4 | 12
170 | 44 | 5 | 12
这些是示例表。我想要的是对两个表中的列值求和,然后对其求和,然后减去它。让我向您显示查询。
SELECT SUM(a.value) - SUM(b.value) AS res
FROM tbl1 AS a
INNER JOIN tbl2 AS b ON a.VID = b.VID
WHERE a.VID = 12;
tbl1的列值的总和是11,表2的列的总和是28。我想要的结果是-17(将两个表中的值相加然后减去它们)。但是我得到的答案是23。
答案 0 :(得分:1)
您必须先汇总 联接,因为两个表中都有重复项:
SELECT (a.value - b.value) AS res
FROM (SELECT SUM(value) as value
FROM tbl1
WHERE a.VID = 12
) a CROSS JOIN
(SELECT SUM(value) as value
FROM tbl1
WHERE a.VID = 12
) b;
要查看查询正在聚合的内容,请在不进行聚合的情况下运行查询:
SELECT a.*, b.*
FROM tbl1 a INNER JOIN
tbl2 b
ON a.VID = b.VID
WHERE a.VID = 12;
这将帮助您了解JOIN
中正在发生的事情-以及为什么结果不是您想要的。
答案 1 :(得分:1)
最简单的方法是直接减去总和:
select
(select sum(value) from tbl1 where VID = 12) -
(select sum(value) from tbl2 where VID = 12) AS res
请参见demo。
结果:
> | res |
> | --: |
> | -17 |