偶然发现了我无法找到解决方案的问题,需要一些帮助或指出我正确的方向。
这些表将几部电影分类为多种类型,例如:玩具总动员属于流派;儿童,喜剧和动画。
我试图找出哪种类型最清晰,哪些类型混乱,以至于它们往往被列为其他几种类型的典型电影。
对于数据集中的每个流派,平均来说,该流派中的电影类型有多少。例如,一部动作电影有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
表中每个类型的计数。我似乎无法弄清楚如何将其转换为每种类型的电影的平均流派数量。
答案 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