Получить первые N строк каждой группы в MySQL - PullRequest
0 голосов
/ 23 сентября 2019

Учитывая таблицу MySQL вида

Name   | Type
-------+-----
Bill   | A
Hill   | B
Jill   | C
Hans   | A
George | C
Sophie | B
Hannah | B
Nancy  | C
Phil   | A
...    | ...

Я хотел бы создать запрос MySQL, который предоставляет мне верхние строки N, сгруппированные по их типу.Под «вершиной» я подразумеваю данный порядок.В этом примере это может быть порядок, заданный упорядочением параметров типа по алфавиту (или по дате, если все параметры типа являются датами).Например, если N = 2, тогда результирующая таблица может быть:

Name   | Type
-------+-----
Bill   | A
Hill   | B
Jill   | C
Hans   | A
George | C
Sophie | B
...    | ...

То есть записи могут быть очень хорошо сгруппированы в соответствующие им типы в результирующих таблицах, но это не является строго важным, чтобыони есть.Я использую MySQL 8.x.

1 Ответ

4 голосов
/ 23 сентября 2019

Если вы хотите n строк на группу, используйте row_number().Если вы хотите, чтобы они чередовались, используйте order by:

select t.*
from (select t.*,
             row_number() over (partition by type order by name) as seqnum
      from t
     ) t
where seqnum <= 2
order by seqnum, type;

. Предполагается, что "top" в алфавитном порядке: name.Если у вас есть другое определение, используйте его для order by для row_number().

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