MySQL: "упорядочить" внутри "группировки по" - PullRequest
9 голосов
/ 19 марта 2011

У меня есть таблица MySQL names, которая состоит из двух полей: name и rank. Значение name не является уникальным, может иметь несколько совпадений.

Проблема: я хочу выбрать записи, сгруппированные по name, но если их более одного name, нужно взять ту, которая имеет наивысший rank.

Пример:

Том 2

Бен 1

Бен 2

ВЫБРАТЬ * ИЗ names ГРУППА ПО name ЗАКАЗАТЬ ПО rank DESC

Обычно возвращает:

Том 2

Бен 1

Мне нужно:

Том 2

Бен 2

Так как есть два Бена, но второй с более высоким рангом.

Кажется, что группировка MySQL берет имя и игнорирует остальные.

Как мне упорядочить записи внутри «group by», чтобы я мог сказать, какую запись следует взять, если существует более одной с одинаковым name?

Ответы [ 3 ]

8 голосов
/ 19 марта 2011

Вам нужна агрегатная функция с именем max:

select name, max(rank)
  from names
 group by name;

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

5 голосов
/ 12 сентября 2012

Для меня это сработало:

Чтобы взять последний ряд внутри группы:

select * from 
( select name, rank from names order by rank desc ) as a 
group by name
2 голосов
/ 19 марта 2011

Использование max():

select name,
       max(rank)
from names
group by name
order by max(rank) desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...