选择分组到特定标识符的值

时间:2008-09-23 00:36:21

标签: mysql sql database

我有一个跟踪游戏高分的应用程序。

我有一个 user_scores 表,用于将user_id映射到分数。

我需要返回5个最高分,但对于任何特定的用户,只需要获得1个高分。

因此,如果用户X在纯数字基础上获得5个最高分,我只返回最高分数,然后返回接下来的4个用户分数。

我试过用:

SELECT user_id, score 
FROM user_scores 
ORDER BY score DESC 
GROUP BY user_id 
LIMIT 5

但似乎MySQL会丢弃任何超过1分的user_id。

6 个答案:

答案 0 :(得分:6)

这应该有效:

SELECT user_id, MAX(score)
FROM user_scores 
GROUP BY user_id 
ORDER BY MAX(score) DESC 
LIMIT 5

答案 1 :(得分:1)

SELECT user_id, MAX(score) AS score
FROM user_scores 
GROUP BY user_id
ORDER BY score DESC
LIMIT 5

应该为你做的工作......虽然不要忘记创建索引......

答案 2 :(得分:0)

如果没有摘要功能(SUM,COUNT等)

,则无法进行分组

GROUP BY子句说明如何对SUM或COUNT进行分组。

如果您只是想将长列表分成具有公共值的串,那不是SQL。这就是你的申请必须做的事情。

答案 3 :(得分:0)

您可以使用Distinct运算符来说明

SELECT DISTINCT(user_id), score
FROM user_scores
ORDER BY score DESC
LIMIT 5

没有测试,所以不确定这是否肯定会起作用

答案 4 :(得分:0)

仅返回给定用户的最高分数如下所示。

SELECT user_id, max(score) FROM user_scores
GROUP BY user_id

答案 5 :(得分:0)

我不知道是缺乏咖啡因还是只是大脑爆炸,但这里的答案非常简单。

我实际上是在使用这种怪物:

SELECT s1.user_id, 
    (SELECT score FROM user_scores s2 WHERE s2.user_id = s1.user_id ORDER BY score DESC LIMIT 1) AS score 
FROM user_scores s1         
GROUP BY s1.user_id
ORDER BY s1.score DESC        
LIMIT 5