比较按另一列的不同取值分组后,两个不同数值之和,以及按“相反”值分组

编程语言 2026-07-11

我在尝试编写一个查询,从同一张表的两个不同字段中找出“匹配”的数据。

例如,一个表有客户列、收费金额列和地点列。我想找出在两个地点列中存在的相反金额。

例如,客户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
) ?
  1. 如何对每个客户分别比较地点A 和地点B 的总金额?
  2. 是否有方法找出金额完全相反的一组呢?比如地点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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章