簡體   English   中英

如何獲得按 MySQL 中的字段分組的最大計數?

[英]How to get the max count grouped by a field in MySQL?

鑒於此表包含商店出售的電影列表:

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

如果您的 MySql 版本是 8.0+,您可以使用RANK() window function:

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     |

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM