gpt4 book ai didi

sql - 创建具有唯一用户的顶级列表

转载 作者:行者123 更新时间:2023-11-30 23:39:23 25 4
gpt4 key购买 nike

我有一个包含字段id、user_id、condition1、condition2、condition3、score 的表。每个用户在表中可以有几行。我现在要做的是创建几个排行榜。例如,它可能是一个顶部列表,其中 condition1 = foo 我只想对每个用户计数一次,但我想要每个用户的完整最佳行。

所以 SELECT user_id, MAX(score) AS s FROM table WHERE condition1 = foo ORDER BY s DESC LIMIT 50 不起作用。

我想要这么多不同的排行榜,所以创建第二个表来存储用户的最佳结果并不是一个真正的选择。因为每个用户可能会有超过 100 个不同的最佳结果。

重要的两件事是快速进入前 50 名。而且还可以获取特定用户的位置(只需检查有多少唯一用户的得分高于特定用户,这就非常容易)。

更新:我测试了 Thomas 和 Quassnoi 的想法,Thomas 的想法用了 11 秒,而 Quassnoi 用了 4.5 秒。

然后我想出了另一种方法来做到这一点:

SELECT (  
SELECT id
FROM table AS ti
WHERE ti.user_id = t.user_id
AND condition1 = foo
ORDER BY score DESC
LIMIT 1
)
FROM table as t
WHERE condition1 = foo
GROUP BY user_id
ORDER BY MAX(score) DESC
LIMIT 50

然后我只进行另一个查询,其中选择所有行 WHERE id IN(第一个查询返回的所有 id),这种方式需要 0.4 秒。

这是一个很好的方法还是我的测试数据很幸运?

最佳答案

未测试,但我认为您缺少 GROUP BY 子句:

SELECT user_id, MAX(score) AS s FROM table WHERE condition1 = foo GROUP BY user_id ORDER BY s DESC LIMIT 50

关于sql - 创建具有唯一用户的顶级列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4724409/

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