我正在将两个表与一个内部联接组合在一起,其中主要ID是电影ID,我想按照每个演员每年的电影数量对它们进行分组。但是 - 可能是因为电影ID是主键 - 我得到的结果不正确。以下是我的代码。数据库来自iMDB,它有一个带有电影和演员的演员表,一个演员表和一年的电影表。
SELECT
c.actor_id, m.year, COUNT(m.title)
FROM
cast c
INNER JOIN movies m
WHERE
c.movie_id = m.id
GROUP BY m.year
ORDER BY COUNT(m.title) DESC;
答案 0 :(得分:2)
需要在actor_id
条款中加入GROUP
,因为您每年都会计算每位演员的电影数量。
SELECT
c.actor_id, m.year, COUNT(m.title)
FROM
cast c
INNER JOIN movies m
WHERE
c.movie_id = m.id
GROUP BY c.actor_id, m.year
ORDER BY COUNT(m.title) DESC;
答案 1 :(得分:1)
未汇总的所有内容都必须位于GROUP BY
。大多数RDBMS会在你的SQL上出错,但是MySQL会给你一个免费的通行证#34;在它上面:
SELECT
c.actor_id, m.year, COUNT(m.title)
FROM
cast c
INNER JOIN actor_movie am ON am.actor_id=am.actor_id
INNER JOIN movies m ON am.movie_id=m.movie_id
WHERE
c.movie_id = m.id
GROUP BY c.actor_id, m.year
ORDER BY COUNT(m.title) DESC;
请注意,内部联接需要一个您未包含的ON
子句。我添加了一个可能的实现与一个actor-movie表,我想你已经(或应该有)。