Если ваша версия 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 |