gpt4 book ai didi

LIMIT(3) 行的 MySQL SUM 与 GROUP BY

转载 作者:行者123 更新时间:2023-11-29 02:47:49 24 4
gpt4 key购买 nike

好人,需要一点 MySQL 的帮助。在网上尝试了一些解决方案,但都可以解决问题。

我有这个简单的表格。

name    amount
john | 150
john | 100
john | 100
john | 150
jack | 300
jack | 100
jack | 100

基本上,我必须在至少 3 行(按最高金额排序)中获取总和为 500 的用户。正确答案应该只返回 jack 因为只有他在 3 条记录中的总和为 500(按最高排序)。如果 john 的总和为 500,他的最高金额中的 3 个只会返回 400(150+150+100),因此查询不会返回 john

SELECT 
*,
SUM(amount) as sums
FROM (SELECT * FROM transfer GROUP BY name ORDER BY amount DESC LIMIT 3) as ttl
GROUP BY name
HAVING sums >= 500

它工作正常(至少没有错误),但第二个选择(括号内的那个)只返回第一行。

非常感谢任何帮助。

最佳答案

让我假设您有另一列是唯一 ID。然后你可以这样做:

select distinct t1.name
from transfer t1 left join
transfer t2
on t1.name = t2.name and t1.id < t2.id left join
transfer t3
on t1.name = t3.name and t2.id < t3.id
where t1.amount + coalesce(t2.amount, 0) + coalesce(t3.amount, 0) >= 500;

对于较大的表,这不是非常有效。为此,使用变量来枚举值:

select name
from (select t.*,
(@rn := if(@n = name, @rn + 1,
if(@n := name, 1, 1)
)
) as rn
from transfer cross join
(select @n := '', @rn := 0) params
order by name, amount desc
) t
where rn <= 3
group by name
having sum(amount) >= 500;

这还有一个好处,即它不依赖于 id 列。

关于LIMIT(3) 行的 MySQL SUM 与 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39705184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com