sql 多条件排序并去重(已解决)

原问题

遇到的问题,有一张用户成绩表。

字段为:主键id,用户id,分数,创建时间,其他字段。

用户id会重复。

需要对用户成绩进行排序,排序规则是分数降序,时间升序。

并且每个用户只会出现一次(去重),取分数最高时间最早的那条。

解决方案

~~~sql
SELECT s.user_id, s.score, s.create_time
FROM user_score s
         INNER JOIN (SELECT user_id, chart_id, MAX(score) AS max_score
                     FROM user_score
                     WHERE chart_id = 11
                     GROUP BY user_id, chart_id) t
                    ON s.user_id = t.user_id AND s.chart_id = t.chart_id AND s.score = t.max_score
         inner join(select user_id, chart_id, max(create_time) as time
                    from user_score
                    where chart_id = 11
                    group by user_id, chart_id) u
                   on s.user_id = u.user_id AND s.chart_id = u.chart_id AND s.create_time = u.time
WHERE s.chart_id = 11
ORDER BY s.score DESC, s.create_time DESC
LIMIT 50;
~~~

详细解决过程可以看我的博客,其实sql算是ChatGPT写出来的

sql多条件排序并去重 | 咕咕咕的小破站