这道题最大的难点在于: 1)对 “如果两人最大分数相同,选择最小分数大者,如果还相同,选择uid大者” 这一条件的理解。 2)题目要求的结果,每一行的ranking是不可能重复的,所以ROW_NUMBER()相较于DENSE_RANK()肯定是更优的 第一次写的原代码如下,使用了两层子查询: SELECT t2.tag, t2.uid, t2.ranking FROM ( SELECT t.tag, t.uid, ROW_NUMBER() OVER (PARTITION BY t.tag ORDER BY t.max_s DESC, t.min_s DESC, t.uid DESC) AS r...