我有一个跟踪游戏高分的应用程序。
我有一个 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。
答案 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