簡體   English   中英

通過 Join 得到 SQL 的平均值

[英]Get Average in SQL Through Join

我只是在玩 SQL 並且正在嘗試執行以下操作。

我有 2 個表,這是它們的結構:

  1. Movies_metadata電影

  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM