gpt4 book ai didi

mysql - 为什么在这个简单的查询中 sum 的结果加倍了?

转载 作者:行者123 更新时间:2023-11-30 00:56:52 29 4
gpt4 key购买 nike

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。

我应该如何重写查询以获得预期结果?

最佳答案

这是由于与另一个表的JOIN所致。

如果您只使用 JOINS 运行简单查询,但没有使用 SUM,您将看到表 A 中的记录加倍,因为您使用 INNER JOIN表B.

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这个查询是如何工作的。

关于mysql - 为什么在这个简单的查询中 sum 的结果加倍了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20479575/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com