按分组排列的前2名结果?

时间:2011-09-20 13:37:58

标签: mysql sql

我有一个表“记录:id,name,score”和想要查询每个名字的2个最高分。我正在使用group by获得最高分:

select name,max(score)as score from record group by name order by score

但我认为使用group by获得2分最高分是不可能的,我该如何获得它们?

3 个答案:

答案 0 :(得分:4)

 SELECT name, score FROM record R1
   WHERE (SELECT COUNT(DISTINCT score) FROM record R2
          WHERE R2.name = R1.name 
            AND R2.score >= R1.score) <= 2

不是特别高效(也就是说,可能有点慢),但它应该返回你想要的东西。

答案 1 :(得分:2)

您需要的是MySQL目前不支持的排名功能。但是,您可以像这样模拟它:

Select name, score, rnk
From  (
      Select name, score
        , @curRank := if(@name=name, if(@score=score, @curRank, @curRank + 1), 1) As rnk
        , @name := name
        , @score := score
      From  (
            Select name, score
            From record
              Cross Join ( Select @curRank := 0, @name := '', @score := -1 ) As Z1
            Order By name, score Desc
            ) as R
      ) As Z
Where rnk <= 2

SQL Fiddle

答案 2 :(得分:0)

select TOP (2) name,max(score)as score from record group by name order by score

编辑: 我刚刚注意到它在mysql然后

select name,max(score)as score from record group by name order by score LIMIT 2

相关问题