我只是在玩 SQL,我正在嘗試執行以下操作。
我有 2 張桌子,這是它們的結構:
Movies_metadata電影
收視率表: 收視率
由于一部電影有很多評分,我想做的是獲取每部電影的平均評分,并將其顯示在標題旁邊,該標題僅在元資料表中可用。
這是據我所知,但顯然我的 SELECT 陳述句的問題是它將回傳所有電影的平均值并為每條記錄顯示它:
SELECT
(SELECT
AVG(rating)
FROM
`movies-dataset.movies_data.ratings`) AS rating_avg,
metadata.title,
metadata.budget,
metadata.revenue,
metadata.genres,
metadata.original_language,
metadata.release_date
FROM
`movies-dataset.movies_data.Movies_metadata` AS metadata
INNER JOIN `movies-dataset.movies_data.ratings` AS ratings
ON metadata.id = ratings.movieId
LIMIT 10
這是一個結果示例:
結果
我想我可以使用 GROUP BY 但是當我嘗試時,我得到一個錯誤
感謝幫助!
uj5u.com熱心網友回復:
以下應該有效:
SELECT movies_metadata.title, AVG(ratings.rating)
FROM movies_metadata
LEFT JOIN ratings ON movies_metadata.id = ratings.movieID
GROUP BY movies_metadata.title
如果不是唯一movies_metadata.title的,您可以交換。movies_metadata.id
uj5u.com熱心網友回復:
LIMIT 函式和 GROUP 函式可能會相互沖突。嘗試將平均評分作為內部連接的一部分,如下所示:
SELECT
ratings.averagerating,
metadata.title,
metadata.budget,
metadata.revenue,
metadata.genres,
metadata.original_language,
metadata.release_date
FROM `movies-dataset.movies_data.Movies_metadata` AS metadata
INNER JOIN (SELECT movieId, AVG(rating) averagerating FROM `movies-dataset.movies_data.ratings` GROUP by movieId) AS ratings
ON metadata.id = ratings.movieId
ORDER BY ratings.averagerating
LIMIT 5
uj5u.com熱心網友回復:
也許嘗試類似:
Select m.movieID, (r.rate_sum / r.num_rate) as avg_rating
From your_movies_table m
Left Join (select movie_id, sum(rating) as ‘rate_sum’, count(rating) as ‘num_rate’
From your_ratings_table
Group by movie_id) r
On m.movie_id = r.movie_id
我正在使用左連接,因為我不確定是否所有電影都至少被評分過一次。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/439326.html
上一篇:計算視圖中的欄位
