类型SQL Server 2012中每部电影的平均类型

时间:2017-05-17 22:57:05

标签: sql-server sql-server-2012

偶然发现了我无法找到解决方案的问题,需要一些帮助或指出我正确的方向。

这些表将几部电影分类为多种类型,例如:玩具总动员属于流派;儿童,喜剧和动画。

我试图找出哪种类型最清晰,哪些类型混乱,以至于它们往往被列为其他几种类型的典型电影。

对于数据集中的每个流派,平均来说,该流派中的电影类型有多少。例如,一部动作电影有1.3种类型,一般的冒险电影有2.9种类型,因此动作电影是一种更好定义的类型。

以下是表格的示例,但这里是一个sql编辑器,其中包含表格和值以供参考:https://blazerme.herokuapp.com/queries/new

3张表:

流派表:

id  name
1   Action
2   Adventure
3   Animation
4   Children's
5   Comedy

genre_movies表:

id movie_id     genre_id
1  1(Toy Story) 3(Animation)
2  1(Toy Story) 4(Children's)
3  1(Toy Story) 5(Comedy)
4  2(GoldenEye) 1(Action)
5  2(GoldenEye) 2(Adventure)
6  2(GoldenEye) 16(Thriller)

电影表:

id title             release_date
1  Toy Story (1995)  1995-01-01
2  GoldenEye (1995)  1995-01-01
3  Four Rooms (1995) 1995-01-01

到目前为止,我的最大努力是尝试平均超过genre_id的数量。见下文:

SELECT 
    name, AVG(c.count)
FROM 
    (SELECT
         g.name AS name, COUNT(gm.genre_id) AS count
     FROM
         genres g 
     INNER JOIN
         genres_movies gm ON g.id = gm.genre_id
     INNER JOIN
         movies m ON m.id = gm.movie_id
     GROUP BY
         g.name) c
GROUP BY
    name

但这简单地给了我genres_movies表中每个类型的计数。我似乎无法弄清楚如何将其转换为每种类型的电影的平均流派数量。

2 个答案:

答案 0 :(得分:2)

我首先使用我想要的主要信息构建最里面的查询,然后向外工作,从而解决这样的问题。

所需的核心信息是:

$con = mysql_connect('localhost', 'user_log', '12345'); 
$db = mysql_select_db('name_log',$con);

完整的查询:

select movie_id, count(*) from genres_movies group by movie_id

答案 1 :(得分:-1)

您需要在桌子上做笛卡尔乘积(自连接),以便为每部电影,两种流派的每种组合都进行放映。然后,聚合/统计更加明显。

好。这是代码。

Select Genres.Name As Genre,
        Count(*)*1.0/Count(Distinct A.Movie_Id) As Average_Genres
    From Genres_Movies A
            Inner Join
        Genres_Movies B
                On A.Movie_Id=B.Movie_Id
            Inner Join
        Genres
                On A.Genre_Id=Genres.Id
    Group By Genres.Name
    Order By 2 Desc