2013-07-31 164 views
0

查找電影,他們的球迷都小於該特定類型SQL查詢發現平均

fan (fID: integer, fName: string) 
movies(mID: integer, mName: string, mGenre: string, mYear: integer) 
like(fID: integer, mID: integer) 

外鍵的平均數量的球迷:

(like.fID -> fan.fID) 
(like.mID-.> movie.mID) 

我試着這樣做是爲了獲得平均數量對於每部電影的球迷,它沒有工作:

SELECT mGenre, AVG(total) 
FROM findAverage, movies 
GROUP BY mGenre; 

CREATE VIEW findAverage AS 
SELECT m.mName, COUNT(DISTINCT L.fID) as total 
FROM like L, movies m 
WHERE L.mID = B.mID 
GROUP BY m.mName 

回答

1

你需要改變你的看法,包括mId字段。那麼你可以用這個字段JOIN你的觀點回到movies表。

CREATE VIEW findAverage AS 
SELECT L.mId, m.mName, COUNT(DISTINCT L.fID) as total 
FROM like L 
    INNER JOIN movies m ON L.mID = B.mID 
GROUP BY L.mId, m.mName 

然後拿到平均每流派:

SELECT m.mGenre, AVG(f.total) 
FROM findAverage f 
    INNER JOIN movies m ON f.mId = m.mId 
GROUP BY m.mGenre 
+0

我怎樣才能得到的輸出作爲movieID,以及爲的movieName具有比各自流派的電影的平均球迷少的球迷電影。例如,如果動作類型每部電影平均有100名粉絲,蘭博有89名粉絲,而洛基有105名粉絲,我只想讓蘭博和蘭博的電影iD輸出。再次感謝你的幫助 – user2636289