首页 > 解决方案 > 从 SUM 中取最大值

问题描述

我试图结合三个表来确定最富有的人,看看谁拥有不到一半的钱。

这3张表是:

Persons (id, name)

BankAccounts(id,balance)

AccountOf(id,person_id → Persons,account_id → BankAccounts)

id 在每个表中都是唯一的

问题是:编写一个查询,返回所有财富不到最富有的人一半的人的姓名。我们将一个人的财富定义为他/她所有账户的总金额。

我被困在这里。到目前为止我得到了这个:

SELECT P1.name, SUM(B.balance) as b
FROM Persons P1
LEFT JOIN AccountOf A1
ON A1.person_id = P1.id
LEFT JOIN BankAccounts B
ON B.id = A1.account_id
GROUP BY name

这给出了每个名字和他们所有账户的余额总和。但在那之后我不能使用 WHERE 来确定在哪里

SUM(b) < 0.5 * MAX(b)

根本没有账户的人也需要算作穷人。我只想制作一张没有余额的名称表。

标签: mysql

解决方案


SELECT P1.name, SUM(B.balance) as b
FROM Persons P1
LEFT JOIN AccountOf A1 ON A1.person_id = P1.id
LEFT JOIN BankAccounts B ON B.id = A1.account_id
GROUP BY name
HAVING SUM(B.balance) < MAX((SELECT SUM(B.balance) as b
  FROM AccountOf A1
  LEFT JOIN BankAccounts B ON B.id = A1.account_id
  GROUP BY A1.person_id ORDER BY b DESC  LIMIT 1)
) * 0.5

推荐阅读