我有一个表“记录:id,name,score”和想要查询每个名字的2个最高分。我正在使用group by获得最高分:
select name,max(score)as score from record group by name order by score
但我认为使用group by获得2分最高分是不可能的,我该如何获得它们?
答案 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
答案 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