Sql server SQL Server 2012类型中每部电影的平均类型
偶然发现这个问题,我也找不到解决方案,需要一些帮助或给我指出正确的方向 这些表格将几部电影分为多种类型,例如:《玩具总动员》属于多种类型;儿童、喜剧和动画 我试图找出哪种类型的电影最为清晰,哪种类型的电影如此混乱,以至于在一部典型的电影中,它们往往被列在其他几种类型的电影中 对于数据集中的每种类型,该类型的电影平均有多少种类型。例如,一部动作片有1.3种类型,而一般的冒险片有2.9种类型,因此动作片是一种更好定义的类型 下面是表的示例,但这里有一个sql编辑器,其中包含表和值供参考: 3个表: 类型表:Sql server SQL Server 2012类型中每部电影的平均类型,sql-server,sql-server-2012,Sql Server,Sql Server 2012,偶然发现这个问题,我也找不到解决方案,需要一些帮助或给我指出正确的方向 这些表格将几部电影分为多种类型,例如:《玩具总动员》属于多种类型;儿童、喜剧和动画 我试图找出哪种类型的电影最为清晰,哪种类型的电影如此混乱,以至于在一部典型的电影中,它们往往被列在其他几种类型的电影中 对于数据集中的每种类型,该类型的电影平均有多少种类型。例如,一部动作片有1.3种类型,而一般的冒险片有2.9种类型,因此动作片是一种更好定义的类型 下面是表的示例,但这里有一个sql编辑器,其中包含表和值供参考: 3个表:
id name
1 Action
2 Adventure
3 Animation
4 Children's
5 Comedy
电影类型表:
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
电影表:
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
到目前为止,我所做的最大努力是尝试对流派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\u movies
表中每种类型的计数。我似乎不知道如何将其转化为每种类型电影的平均类型数 我首先用我想要的主要信息构建最内部的查询,然后向外工作,以此来解决类似的问题
所需的核心信息是:
select movie_id, count(*) from genres_movies group by movie_id
完整查询:
select G.name, Round(avg(numgenres),2) as MuddleFactor
from genres_movies GM
inner join
(select movie_id, count(*) as numGenres
from genres_movies
group by movie_id) MNG
on MNG.movie_id = GM.movie_id
inner join genres G
on GM.genre_id = G.id
group by G.name
order by MuddleFactor desc
你需要在桌子上做一个笛卡尔积(self-join),这样你就可以为每部电影展示两种类型的每一种组合。然后,聚合/统计更为明显 嗯。这是密码
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
你能在问题中添加更多的例子和预期结果吗?看不到恐怖电影的任何记录。在本例中,请参阅流派表中的@DarshanMehta恐怖id=11。我用行动代替了恐惧,以澄清一点。这个问题对我来说也很难理解,所以如果你需要更清楚的话,请告诉我。我在表格中添加了我到目前为止所做的工作,以及更多的例子。是的,但这样我就违反了我在参加InstaCart测试时与InstaCart达成的协议。我给出了足够的提示,能够很好地抽象数据问题的人应该能够很容易地解决。但再给一个提示,这个问题可以通过一个连接和一个分组来解决。谁是instacart?为什么编写SQL查询会违反任何协议?听起来是一个非常糟糕的借口我再次查看了他们的另一个测试,它说:“我不会从任何来源(包括网站、书籍或朋友/同事)查阅/复制代码来完成这些测试,尽管可能会参考语言文档或使用具有代码完成功能的IDE。”因此,它不会要求我不发布解决方案。鉴于InstaCart的数据科学家从他们的技术博客上判断的水平非常高,如果申请者需要我的提示来回答这个SQL问题,他们无论如何也不会深入这个过程。所以我会把密码贴到他的问题上。