gpt4 book ai didi

sql - 使用左连接的 SUM 得到错误的结果

转载 作者:行者123 更新时间:2023-12-02 02:46:34 24 4
gpt4 key购买 nike

所以我有 :

CREATE TABLE A (id INT,type int,amount int);
INSERT INTO A (id,type,amount) VALUES (1,0,25);
INSERT INTO A (id,type,amount) VALUES (2,0,25);
INSERT INTO A (id,type,amount) VALUES (3,1,10);


CREATE TABLE B (id INT,A_ID int,txt text);
INSERT INTO B (id,A_id,txt) VALUES (1,1,'abc');
INSERT INTO B (id,A_id,txt) VALUES (2,1,'def');
INSERT INTO B (id,A_id,txt) VALUES (3,2,'xxx');

我运行这个查询:
SELECT min(A.id), SUM(A.amount), COUNT(B.id) FROM A
LEFT JOIN B ON A.id = B.A_id
GROUP BY A.type

我得到:
min(A.id)   SUM(A.amount)   COUNT(B.id)
1 75 3
3 10 0

但我反而期望得到:
min(A.id)   SUM(A.amount)   COUNT(B.id)
1 50 3
3 10 0

有人可以帮忙吗?达到这个确切结果的最佳方法是什么?
我想要 group BY 类型并获取分组 A.amount 的 SUM 并获取与其外键对应的所有 B 的 count() 。

这是重现: https://www.db-fiddle.com/f/esu13uGLcgFDpX7aEQRMJR/0请运行sql代码。

编辑以添加更多细节:我知道 结果正确 如果我删除 group by 我们可以看到
1, 50, 2
2, 25, 1

但我期望上述结果,实现它的最佳方法是什么?我想制作一个类型的 SUM 然后计算与这个分组 A 相关的所有 B

最佳答案

只是解决方案的较短版本。它首先在内部查询中计算 B_ID,因此我需要对外部查询中的计数求和。

SELECT  min(A.id), SUM(A.amount), Sum(Bid) FROM A
LEFT JOIN (select count(id) as Bid, A_id from B group by A_id) as Bcount
ON A.id = Bcount.A_id
GROUP BY A.type

关于sql - 使用左连接的 SUM 得到错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54406979/

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