mysql - 从 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)
根本没有账户的人也需要算作穷人。我只想制作一张没有余额的名称表。
解决方案
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
推荐阅读
- php - Heroku上传文件没有s3
- android - 为什么这个 if 语句总是返回 true?
- android - Android Studio Instant Run 循环依赖(更新后)
- haskell - Haskell map 函数,返回一个不带零的列表
- python - 内联“if”语句中的“或”布尔值
- javascript - 导入“marker-animate-unobtrusive”时,Vue 导入失败
- arrays - 分隔列表的不同部分
- firebase - Google Firebase 如何捕获特定的身份验证异常错误 - Unity
- java - 我如何获得已开始活动的上下文
- google-app-engine - gae/py37 上不再有“google.appengine.api.users”:如何识别登录用户?