Mysql Max 与 Group by 查询

标签 mysql

我有一个可能是“经典”的 mysql max/group by Question 这是我的基本表结构。

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 那样的 PARTITION 函数,因此我使用了一种已知的解决方法。

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

关于Mysql Max 与 Group by 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37597519/

相关文章:

mysql - log4net Mysql 日志记录在我的 .net 3.5 应用程序中不起作用

php - 使用变量运行 PHP 循环

MySQL JOIN + 子查询查询优化

mysql - 获取上个月的行

jquery - 呈现数据表 bool 列

php - 更新我的数据库中User_id = 1的值

mysql - Alter a column default 在使用语句后不生效

php - 如何使用 Laravel Eloquent 应用数组中的值并更新行?

mysql - 如何查找特定时间范围内发生的条目?

mysql - 连接空间 mysql 索引