Подтвердить что ты не робот

SQL: поиск максимальной записи для каждой группы

Возможный дубликат:
Получение последней записи в каждой группе

У меня есть одна таблица, которая имеет три поля и данные.

Name  , Top , Total
cat   ,   1 ,    10
dog   ,   2 ,     7
cat   ,   3 ,    20
horse ,   4 ,     4
cat   ,   5 ,    10
dog   ,   6 ,     9

Я хочу выбрать запись с самым высоким значением Total для каждого Name, поэтому мой результат должен быть таким:

Name  , Top , Total
cat   ,   3 ,    20
horse ,   4 ,     4
Dog   ,   6 ,     9

Я попробовал группу по порядку имен по сумме, но она дает самую большую запись группы по результату. Может ли кто-нибудь вести меня, пожалуйста?

4b9b3361

Ответ 1

select
  Name, Top, Total
from
  sometable
where
  Total = (select max(Total) from sometable i where i.Name = sometable.Name)

или

select
  Name, Top, Total
from
  sometable
  inner join (
    select max(Total) Total, Name
    from sometable
    group by Name
  ) as max on max.Name = sometable.Name and max.Total = sometable.Total

Ответ 2

Вы можете попробовать что-то вроде

SELECT  s.*
FROM    sometable s INNER JOIN
        (
            SELECT  Name,
                    MAX(Total) MTotal
            FROM    sometable
            GROUP BY Name
        ) sMax  ON  s.Name = sMax.Name 
                AND s.Total = sMax.MTotal

Ответ 3

Или используя предложение Exists, которое возвращает единственную строку, которая существует в обеих таблицах

SELECT * from sometable T
where exists
(select 1
from (SELECT nombre, max(total) as total FROM  sometable TT
    GROUP by nombre) TT
where T.name=TT.name
and T.total=TT.total
)