按主键计数的SQL组

时间:2018-03-22 18:36:12

标签: mysql sql inner-join

我正在将两个表与一个内部联接组合在一起,其中主要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;

2 个答案:

答案 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表,我想你已经(或应该有)。