某列的分组最大值有问题

斯特夫

我想为每种类型的电影找到 N 个出演过大多数类型电影的演员

表及其列:

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 genre.genre_name,actor.actor_id,count(genre.genre_name) as max_value 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 
order by max_value desc;

这为我提供了每种类型的电影,演员以及他们播放了多少这种类型的电影,我想找到播放每种类型电影最多的演员,所以我尝试了这个:

 select genre.genre_name,actor.actor_id,count(genre.genre_name) 
from(select genre.genre_name,actor.actor_id,count(genre.genre_name) as max_value 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 
order by max_value desc) as apotelesmata
group by genre.genre_name;

我从 mysql 工作台得到一个错误,它不能识别我在外部选择函数上的几乎所有内容。我的问题是我应该怎么做才能获得正确的结果。使用我给出的第一个代码,我得到了这个:

Thriller    22591   7
Drama   22591   6
Crime   65536   3
Horror  22591   3
Thriller    812916  3
Action  292028  3
Action  378578  3
Thriller    292028  3
Thriller    378578  3

但我想得到这个:

Thriller    22591   7
Drama   22591   6
Crime   65536   3
Horror  22591   3
Action  292028  3
Action  378578  3
蒂姆·比格莱森

一种选择,相当丑陋:

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;

这个答案的冗长与您问题的基表实际上是一个已经涉及 4 个连接的查询有关。这个表需要在 MySQL 中重复,因为我们没有解析函数。此外,我们没有公共表表达式,这也可以使查询更加简洁。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我需要分组并覆盖具有最小值-最大值的列

来自分类Dev

SQL:选择具有最大值的行并按单个列分组

来自分类Dev

如何获得多列熊猫分组的最大值?

来自分类Dev

熊猫通过两列分组并获得最大值

来自分类Dev

返回每列的最大值,按ID分组

来自分类Dev

在R中每天查找数据框中某列的最大值

来自分类Dev

如何找到列差值最大的行对(按某列值分组)

来自分类Dev

分组时选择最大值的记录

来自分类Dev

通过分组查找最大值

来自分类Dev

Django获取分组数据的最大值

来自分类Dev

Firebird 1.5:按最大值分组

来自分类Dev

分组显示最大值的指标变量

来自分类Dev

Excel查询分组并找到最大值

来自分类Dev

MySql在分组中取最大值

来自分类Dev

选择按年份分组的最大值

来自分类Dev

按 3 列分组并根据第 4 列找到最大值/最小值?

来自分类Dev

dplyr:将for循环中的列的最小值和最大值分组

来自分类Dev

python在分组数据框时跨多个列获取最大值和最小值

来自分类Dev

R:具有最大值的列和行索引

来自分类Dev

SQL-获取具有最大值的列的索引

来自分类Dev

列索引具有逐行最大值

来自分类Dev

如何获得具有列最大值的行?

来自分类Dev

添加具有组最大值的列

来自分类Dev

有条件的计算列中的最大值

来自分类Dev

更新查询中没有autonincrement列的最大值

来自分类Dev

返回具有一列最大值的行

来自分类Dev

R:具有最大值的列和行索引

来自分类Dev

TSQL:获取具有最大值的列的行

来自分类Dev

选择具有最大值保存不同列的行