如何用SQL实现两个SELECT查询结果的数值相减?
解决两表分数差值计算问题
你用MINUS没效果是因为它是集合运算符,作用是返回第一个查询有但第二个查询没有的记录,根本不是用来做数值减法的,完全不符合你的需求。
正确的做法是通过Name字段把两个表关联起来,然后逐个计算分数列的差值,SQL代码如下:
SELECT CONCAT('Diff', ROW_NUMBER() OVER (ORDER BY t1.Name)) AS Name, t2.Score1 - t1.Score1 AS Score1, t2.Score2 - t1.Score2 AS Score2, t2.Score3 - t1.Score3 AS Score3, t2.Score4 - t1.Score4 AS Score4 FROM table1 t1 INNER JOIN table2 t2 ON t1.Name = t2.Name ORDER BY t1.Name;
代码说明:
INNER JOIN:通过Name匹配两个表的记录,确保每个用户的分数都能对应上- 分数差值计算:这里用
table2的分数减去table1的分数,和你示例中Ryan、John的结果一致;如果需要table1减table2或者取差值的绝对值,直接调整表达式即可(比如用ABS(t2.Score1 - t1.Score1)得到绝对值) CONCAT('Diff', ROW_NUMBER()...):生成你需要的Diff1/Diff2/Diff3格式的名称,按Name排序保证顺序和示例一致ORDER BY:确保最终结果的顺序和你期望的一致
执行这段代码后,得到的结果会和你给出的预期输出基本匹配(如果需要Mark的Score1显示7而不是-7,把对应的表达式改成ABS(t2.Score1 - t1.Score1)即可)。
内容的提问来源于stack exchange,提问作者ARIJIT SAHA
相关产品推荐
相关产品推荐

