如何找到多个最大计数

时间:2018-05-28 08:22:34

标签: mysql tsql

假设我们有这些表格:

流派:

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

2 个答案:

答案 0 :(得分:2)

尝试此查询:

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;

注意

以上uery使用在MySQL 8.0中引入的窗口函数,因此如果您使用的是早期版本,则此查询将导致错误。

答案 1 :(得分:0)

这是SqlFiddle在MySql中实现Group-wise Maximum of a Certain Column的算法。

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;