Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何区分某事物每种类型的最大数量_Mysql - Fatal编程技术网

Mysql 如何区分某事物每种类型的最大数量

Mysql 如何区分某事物每种类型的最大数量,mysql,Mysql,我想为每个人找到一份工作 电影类型,查找在大多数电影中扮演过的N名演员 体裁 我已经这样做了: select genre.genre_name,actor.actor_id,count(genre.genre_name) from genre inner join movie_has_genre on movie_has_genre.genre_id=genre.genre_id inner join movie on movie_has_genre.movie_id=movie.movie_i

我想为每个人找到一份工作 电影类型,查找在大多数电影中扮演过的N名演员 体裁

我已经这样做了:

select genre.genre_name,actor.actor_id,count(genre.genre_name) from genre
inner join movie_has_genre on movie_has_genre.genre_id=genre.genre_id
inner join movie on movie_has_genre.movie_id=movie.movie_id
inner join role on movie.movie_id=role.movie_id
inner join actor on actor.actor_id=role.actor_id
group by genre.genre_name,actor.actor_id;
这就给出了每种类型的电影,每一个演员都演过多少部这种类型的电影,现在我想找出每一种类型中,演过这种类型电影最多的演员

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)
结果也应该是这样的:

Action 22591 7
Horror 25863 3
Horror 24867 3
Comedy 23476 2
Drama  14536 1
Drama  19634 1
Drama  17563 1

伙计,我要做的是下一步(假设你的代码运行良好):


好吧,有一个问题:如果平局的话,每个类别可能会返回多个演员。但是我怎么知道谁是赢家呢?我把它给你了。也许这是错的,我不这么认为,但我们都在学习!希望我能帮助您。

您需要使用
MAX()
函数。一些SQL实现(如Oracle)允许您这样做:
SELECT MAX(COUNT(无论什么))
但MySQL不是其中之一

实现您想要的一种方法是:

select genre_name, actor_id, max(genrecount)
from (
    select genre.genre_name, actor.actor_id, count(genre.genre_name) as genrecount
    from genre
    inner join movie_has_genre on movie_has_genre.genre_id=genre.genre_id
    inner join movie on movie_has_genre.movie_id=movie.movie_id
    inner join role on movie.movie_id=role.movie_id
    group by genre.genre_name,actor.actor_id
) as topactor

这会在从内部
SELECT

派生的表上执行外部
选择
,但不会识别外部的流派名称、演员idselect@stef对不起,我弄错了。当我从原始表复制实际表时,我忘记删除对实际表的引用,您必须这样做,因为您引用的是内部select的结果。(你也可以说
topactor.genre\u name
,等等)我已经编辑了我的答案。
select genre_name, actor_id, max(genrecount)
from (
    select genre.genre_name, actor.actor_id, count(genre.genre_name) as genrecount
    from genre
    inner join movie_has_genre on movie_has_genre.genre_id=genre.genre_id
    inner join movie on movie_has_genre.movie_id=movie.movie_id
    inner join role on movie.movie_id=role.movie_id
    group by genre.genre_name,actor.actor_id
) as topactor