通过查询分组的Mysql Max
我问了一个可能是“经典”的mysql max/组 这是我的基本表结构通过查询分组的Mysql Max,mysql,Mysql,我问了一个可能是“经典”的mysql max/组 这是我的基本表结构 id | userid | username | date | score 1 | 1111 | joe | 2012-05-16 | 1000 2 | 2222 | john | 2012-03-17 | 2000 3 | 3333 | jill | 2012-02-11 | 3000 4 | 2222 | john | 2012-12-25 | 5000 5 | 3333 | jill | 2012-04-08 | 400
id | userid | username | date | score
1 | 1111 | joe | 2012-05-16 | 1000
2 | 2222 | john | 2012-03-17 | 2000
3 | 3333 | jill | 2012-02-11 | 3000
4 | 2222 | john | 2012-12-25 | 5000
5 | 3333 | jill | 2012-04-08 | 4000
6 | 1111 | joe | 2012-06-17 | 1000
7 | 1111 | joe | 2012-01-14 | 500
8 | 2222 | john | 2012-06-29 | 6000
9 | 4444 | bill | 2012-08-08 | 4000
我想得到每个用户的最高分数。
每个用户在结果中只能显示一个分数
My desired result is
id | userid | username | date | score
8 | 2222 | john | 2012-06-29 | 6000
9 | 4444 | bill | 2012-08-08 | 4000
5 | 3333 | jill | 2012-04-08 | 4000
6 | 1111 | joe | 2012-06-17 | 1000
如果用户的最高分数在id 1和6前多次出现,则应显示最近的日期
这是我目前的问题
select s.*
from scores as s
inner join (
select userid, max(score) as max_score
from scores
group by userid
) t on s.userid = t.userid and s.score = t.max_score
order by score DESC, date DESC
它返回的结果不正确
id | userid | username | date | score
8 | 2222 | john | 2012-06-29 | 6000
9 | 4444 | bill | 2012-08-08 | 4000
5 | 3333 | jill | 2012-04-08 | 4000
6 | 1111 | joe | 2012-06-17 | 1000
1 | 1111 | joe | 2012-05-16 | 1000
对如何解决这个问题有什么建议吗
我还应该提到,userid和username之间不是一对一的关系。这应该会给出您想要的结果。由于MySql没有SQL SERVER那样的分区功能,所以我使用了一种已知的解决方法
SELECT tmp.id, tmp.userid,tmp.username,tmp.`date`,score FROM
(SELECT *, IF(@prev<>userid, @rownum := 1, @rownum := @rownum+1 ) AS rank,
@prev := userid
FROM scores s0
JOIN (SELECT @rownum := NULL, @prev := 0) AS r
ORDER BY s0.userid, s0.score DESC, s0.`date` DESC
) AS tmp
WHERE tmp.rank=1
ORDER BY tmp.score DESC, tmp.`date` desc
您需要使用嵌套查询两次。只需再嵌套一次,因为您已经这样做了