6

我想SUM(column_a)从两个不同的表中得到它们,并得到它们的区别。我正在使用 MySQL。

Table A's sum = 1234

Table B's sum = 4001

我不确定要在我的ON条款中添加什么:

SELECT 
  SUM(a.column1) AS table_a_sum,
  SUM(b.column1) AS table_b_sum,
  SUM(a.column1) - SUM(b.column1) AS difference
FROM table_a a
JOIN table_b b
ON ??????
4

3 回答 3

14

无条件连接是交叉连接。交叉连接为右侧表格中的每一行重复左侧表格的每一行:

FROM table_a a
CROSS JOIN table_b b

请注意,在 MySQL 中,//cross join是相同的。所以你可以写:joininner join

FROM table_a a
JOIN table_b b

只要您省略该on子句,这将作为交叉连接工作​​。

如果您想对两个表中的两列求和,交叉连接将不起作用,因为它会重复行。你会得到高度夸大的数字。对于总和,根据@sgeddes 的回答,更好的方法是使用子查询。

于 2013-03-19T18:57:12.673 回答
5

这是使用子查询的一个选项——有几种方法可以做到这一点:

SELECT 
  table_a_sum,
  table_b_sum,
  table_a_sum - table_b_sum AS difference
FROM 
    (SELECT SUM(column1) table_a_sum FROM table_a) a,
    (SELECT SUM(column1) table_b_sum FROM table_b) b
于 2013-03-19T18:57:57.960 回答
1

您想先总结一下,然后进行计算:

select a.suma, b.sumb, a.suma - b.sumb
from (select sum(a.column1) as suma from tablea) a cross join
     (select sum(b.column1) as sumb from tableb) b

在表格cross join之间进行运算将生成一个笛卡尔积,这会弄乱您的总和。

于 2013-03-19T18:59:07.713 回答