如何找到多个最大计数

62o28rlo  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(330)

假设我们有这些表:
体裁:

genre_id    genre_name 
1           comedy 
2           horror
3           action

演员:

actor_name    genre_id
stef          2
panos         2
bill          2
panos         2
bill          3
stef          3
panos         3
bill          3
stef          1
stef          1

我想为每种类型的演员谁在这个类型的大多数电影(电影栏不需要,这就是为什么它不存在)。
我想要的结果是:

comedy  stef  2
horror  panos 2
action  bill  2
8iwquhpp

8iwquhpp1#

下面是一个sqlfiddle,它实现了mysql中某一列的按组最大值的算法。

select aActors.genre_id, aActors.actor_name, aActors.aCount as movies_count
from (
  select count(*) as aCount, actor_name, genre_id
  from actors 
  group by actor_name, genre_id
  order by aCount desc
  ) as aActors
left join (
  select count(*) as aCount, actor_name, genre_id
  from actors 
  group by actor_name, genre_id
  order by aCount desc
  ) as bActors
  on aActors.genre_id = bActors.genre_id 
  and aActors.aCount < bActors.aCount
where bActors.genre_id IS NULL;
afdcj2ne

afdcj2ne2#

尝试此查询:

select genre_name, actor_name, cnt from (
    select actor_name,
           genre_name, 
           cnt,
           row_number() over (partition by genre_name order by cnt desc) `rn`
    from (
        select actor_name, genre_name, count(*) `cnt` from actors `a`
        join genres `g` on a.genre_id = g.genre_id
        group by actor_name, genre_name
    ) `a`
) `a` where rn = 1;

笔记
上面的查询使用了mysql 8.0中引入的窗口函数,因此如果您使用的是早期版本,那么这个查询将导致错误。

相关问题