2017-05-17 10 views
2

解決策が見つからず、適切な方向に向いていないという問題が発生しました。ジャンル別ムービーあたりの平均的なジャンル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表から各ジャンルの数を与える:下記を参照してください。私はこれを各ジャンルの映画のジャンルの平均数に変える方法を理解していないようです。

+1

あなたは、問題のより多くの例と予想される出力を追加してもらえますか?ホラー映画のための記録を見ることができません。 –

+0

https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-クエリ – Strawberry

+0

@DarshanMehtaこのケースでは、ホラーはジャンルテーブルのid = 11です。私はホラーをアクションに置き換え、少し明確にしました。この質問は、私が理解するのが難しいので、もっと明快にする必要がある場合はお知らせください。これまでに私が行った作業と、さらにいくつかの例を表に追加しました。 – CharlieE

答えて

0

私は、必要なメイン情報をもっとも内側のクエリーを構築し、次に外側に向かって作業することで、このような問題を解決します。

必要なコアな情報は以下のとおりです。

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 
関連する問題