2 лучших результата в группе по заявлению? - PullRequest
4 голосов
/ 20 сентября 2011

У меня есть таблица «запись: идентификатор, имя, оценка», и хотел бы запросить 2 самых высоких балла для каждого имени .Я использую группу, чтобы получить самый высокий балл как:

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

Но я думаю, что невозможно получить 2 самых высоких балла, используя группу, как их получить?

Ответы [ 3 ]

4 голосов
/ 20 сентября 2011
 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

Не особенно эффективно (то есть может быть немного медленным), но должно возвращать то, что вы ищете.

2 голосов
/ 03 мая 2013

Вам нужна функция ранжирования, которую 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

0 голосов
/ 20 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...