【发布时间】:2018-06-02 00:32:14
【问题描述】:
我想为每个类型的电影找到N个在大多数类型的电影中出演过的演员
Tables and their columns:
actor(actor_id,name)
role(actor_id,movie_id)
movie(movie_id,title)
movie_has_genre(movie_id,genre_id)
genre(genre_id,genre_name)
通过这个查询,我可以找到在同类型电影中出演最多的演员。
select t1.genre_name, t1.actor_id, t1.max_value
from
(
select g.genre_name, a.actor_id, count(*) as max_value
from genre g
inner join movie_has_genre mhg on mhg.genre_id = g.genre_id
inner join movie m on mhg.movie_id = m.movie_id
inner join role r on m.movie_id = r.movie_id
inner join actor a on a.actor_id = r.actor_id
group by g.genre_name, a.actor_id
) t1
inner join
(
select genre_name, MAX(max_value) AS max_value
from
(
select g.genre_name, a.actor_id, count(*) as max_value
from genre g
inner join movie_has_genre mhg on mhg.genre_id = g.genre_id
inner join movie m on mhg.movie_id = m.movie_id
inner join role r on m.movie_id = r.movie_id
inner join actor a on a.actor_id = r.actor_id
group by g.genre_name, a.actor_id
) t
GROUP BY genre_name
) t2
ON t1.genre_name = t2.genre_name and t1.max_value = t2.max_value
ORDER BY
t1.max_value desc;
但我想将演员的数量限制为 1。那我该怎么做呢?
例子:
我得到的结果:
genre_name | actor_id | max_value
==================================
Thriller | 22591 | 7
Drama | 22591 | 6
Crime | 65536 | 3
Horror | 22591 | 3
Action | 292028 | 3
Action | 378578 | 3
Action | 388698 | 3
我想要的结果:
genre_name | actor_id | max_value
==================================
Thriller | 22591 | 7
Drama | 22591 | 6
Crime | 65536 | 3
Horror | 22591 | 3
Action | 292028 | 3
【问题讨论】:
-
如果您有平局,您需要定义选择 1 个参与者的逻辑。这是一个业务逻辑决策,而不是编程决策。一旦你下定决心,实施起来就会容易得多。
-
好吧,假设我想通过 actor_id 作为最小值来限制它。(几乎我选择了 933 actor_id 的人而不是 2591 actor_id 的人)。我的问题是我应该在哪里实现它和为什么我搜索了几个小时却找不到东西。
-
这个问题根本没有反对意见,所以不知道你在说什么。我也没有否决您之前提出的另一个问题。只是将其关闭为重复项。两者不一样。
标签: mysql