[英]Get Average in SQL Through Join
我只是在玩 SQL 並且正在嘗試執行以下操作。
我有 2 個表,這是它們的結構:
由於一部電影有很多評級,我想做的是獲取每部電影的平均評級並將其顯示在僅在 Metadata.table 中可用的標題旁邊。
這是我得到的,但顯然我的 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 但是當我嘗試時,我收到了一個錯誤
感謝幫助!
以下應該工作:
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.id
換成movies_metadata.title
。
LIMIT function 和 GROUP function 可能會相互沖突。 嘗試將平均評分作為內部連接的一部分,如下所示:
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
也許嘗試類似的東西:
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
我正在使用左連接,因為我不確定是否所有電影都至少被評級過一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.