比较按另一列的不同取值分组后,两个不同数值之和,以及按“相反”值分组
我在尝试编写一个查询,从同一张表的两个不同字段中找出“匹配”的数据。
例如,一个表有客户列、收费金额列和地点列。我想找出在两个地点列中存在的相反金额。
例如,客户Richard Lewis在两个地点(地点A 和地点B)的收费金额相同,都是25美元。
另外,棘手的部分是我想要
SELECT SUM(AMOUNT)
FROM client_payments
WHERE client_name = "Richard Lewis"
AND location = 'A';
例如,客户John Smith(地点A)的金额为25,在地点B 的金额为 -25。我正在数据库中寻找像John Smith这样的所有“配对”。
我遇到几件事卡在这里:
SELECT
*
FROM
(
SELECT
*
FROM
client_payments
LEFT JOIN
amounts ?
GROUP BY
location, client
) ?
- 如何对每个客户分别比较地点A 和地点B 的总金额?
- 是否有方法找出金额完全相反的一组呢?比如地点A 的金额是25,地点B 的金额是 -25。我想找到这种完全对称的配对。
解决方案
使用条件聚合来在每个地点找出数值,并在 HAVING 子句中对这些值进行比较:
SELECT client_name,
SUM(CASE location WHEN 'A' THEN amount END) AS amount
FROM client_payments
WHERE location in ('A', 'B')
GROUP BY client_name
HAVING SUM(CASE location WHEN 'A' THEN amount END)
= -SUM(CASE location WHEN 'B' THEN amount END);
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。