如何解决印象中这两个 SQL 查询会给出相同的输出,但它们的结果却大不相同
我正在使用 pandasql
。第一个按预期转换值,但第二个返回甚至不应该存在的东西。但是,我希望它们返回相同的值。在我看来,唯一的区别是在第一个中,分组/求和发生在子查询内,而在第二个中发生在子查询之外。我错过了什么?感谢您的帮助! (底部输出)
SELECT a.'Name',a.Q1,b.Q2,(a.Q1 + b.Q2) AS Total
FROM
(SELECT c.'Name',SUM(c.'Paid Amount') AS Q1
FROM some_data AS c
WHERE c.'Quarter' = 'Q1'
GROUP BY c.'Name') AS a
JOIN
(SELECT d.'Name',SUM(d.'Paid Amount') AS Q2
FROM some_data AS d
WHERE d.'Quarter' = 'Q2'
GROUP BY d.'Name') AS b
ON a.'Name' = b.'Name'
ORDER BY Total DESC
LIMIT 5;
SELECT a.'Name' as Label,SUM(a.'Paid Amount') AS Q1,SUM(b.'Paid Amount') AS Q2,(SUM(a.'Paid Amount') + SUM(b.'Paid Amount')) as Total
FROM
(SELECT c.'Name',c.'Paid Amount'
FROM some_data AS c
WHERE c.'Quarter' = 'Q1') AS a
JOIN
(SELECT c.'Name',c.'Paid Amount'
FROM some_data AS c
WHERE c.'Quarter' = 'Q2') AS b
ON a.'Name' = b.'Name'
GROUP BY Label
ORDER BY Total DESC
LIMIT 5;
我把一些随机数据放在一起来演示这个问题。
解决方法
这就是我所说的一厢情愿的编码。
我希望您意识到在加入之前进行聚合会产生正确的答案。
问题在于 JOIN
既可以乘以行数,也可以删除行。在您的情况下,问题在于一个或两个表都有 name
的多行,这会增加行数。 SUM()
只是将 JOIN
产生的所有值相加。
注意:条件聚合是一种更简单的查询方式:
SELECT c.Name,SUM(CASE WHEN c.Quarter = 'Q1' THEN c.PaidAmount END) AS Q1
SUM(CASE WHEN c.Quarter = 'Q2' THEN c.PaidAmount END) AS Q2
FROM some_data AS c
WHERE c.Quarter IN ('Q1','Q2')
GROUP BY c.Name
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。