给出此表,其中包含商店出售的电影的列表:
store_id | film_id
---------|--------
1 | 123
1 | 32
2 | 145
1 | 123
2 | 84
2 | 456
1 | 6
2 | 456
我如何才能按商店获得销量最高的电影(= film_id
分组的表格中最常出现的store_id
)?我的猜测是max()
count(movie_id)
,但我不知道如何进行这项工作。
我正在尝试获得这种结果:
store_id | mostSoldMovieId
---------|--------
1 | 123
2 | 456
答案 0 :(得分:1)
如果您的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
如果在同一家商店平均卖出两部电影,这将恢复联系。
请参见demo。
对于以前的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
这不会恢复联系。
请参见demo。
结果:
| store_id | film_id |
| -------- | ------- |
| 1 | 123 |
| 2 | 456 |