Как получить максимальное количество сгруппированных по полю в MySQL? - PullRequest
0 голосов
/ 15 апреля 2020

Учитывая эту таблицу, которая содержит список фильмов, проданных в магазине:

store_id | film_id
---------|--------
1        | 123
1        | 32
2        | 145
1        | 123
2        | 84
2        | 456
1        | 6
2        | 456

Как я могу получить самый продаваемый мов ie в магазине (= самый рецидивирующий film_id в таблица сгруппирована по store_id)? Я предполагаю, что это будет max() count(movie_id), но я не могу понять, как сделать эту работу.

Я пытаюсь получить такой результат:

store_id | mostSoldMovieId
---------|--------
1        | 123
2        | 456

1 Ответ

1 голос
/ 15 апреля 2020

Если ваша версия MySql равна 8.0+, вы можете использовать оконную функцию RANK():

select t.store_id, t.film_id mostSoldMovieId
from (
  select store_id, film_id,
    rank() over (partition by store_id order by count(*) desc) rn
  from tablename
  group by store_id, film_id
) t
where t.rn = 1

Это вернет связи, если 2 фильма наверху одинаково проданы для магазина. Смотрите демо . Для предыдущих версий MySql вы могли бы сделать это:

select 
  t.store_id,
  substring_index(group_concat(t.film_id order by counter desc), ',', 1) film_id
from (
  select store_id, film_id, count(*) counter
  from tablename
  group by store_id, film_id
) t  
group by t.store_id

Это не вернет связи. Смотрите демо . Результаты:

| store_id | film_id |
| -------- | ------- |
| 1        | 123     |
| 2        | 456     |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...