mysql> create table a (
-> id varchar(10),
-> val int
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> create table b (
-> id varchar(10),
-> val int
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into a values ('a', 1), ('b', 2), ('c', 3);
mysql> insert into b values ('a', 4), ('a', 5), ('b', 6), ('b', 7), ('c', 8), ('c', 9);
mysql> select a.id, sum(a.val), sum(b.val) from a inner join b on a.id = b.id group by a.id;
+------+------------+------------+
| id | sum(a.val) | sum(b.val) |
+------+------------+------------+
| a | 2 | 9 |
| b | 4 | 13 |
| c | 6 | 17 |
+------+------------+------------+
3 rows in set (0.00 sec)
我的预期结果是sum(a.val)
呈现1,2和3,sum(b.val)
呈现9,13和17。
我应该如何重写查询以获得预期的结果?
答案 0 :(得分:0)
以下是在执行group by和sum之前的连接查询的结果:
a.id a.val b.val
---- ----- -----
a 1 4
a 1 5
b 2 6
b 2 7
c 3 8
c 3 9
如您所见,a.id ='a'的所有行的总和(a.val)将给出2,因为有2行。所以结果是[2,4,6],而不是[1,2,3]。
答案 1 :(得分:0)
这是由于JOIN
与另一个表。
如果您只使用JOINS运行简单查询但没有SUM
,您将看到表A中的记录被加倍,因为您使用表B INNER JOIN
。
A.ID A.val B.val
a 1 4
a 1 5
b 2 6
b 2 7
c 3 8
c 3 9
为了获得预期的结果,您必须像这样查询:
SELECT
A.ID,
A.VAL 'A Sum',
B.VAL 'B Sum'
FROM
(SELECT ID, SUM(VAL) AS 'VAL' FROM A GROUP BY ID) A INNER JOIN
(SELECT ID, SUM(VAL) AS 'VAL' FROM B GROUP BY ID) B ON A.ID = B.ID
以下是SQLFiddle,了解此查询的工作原理。