我已经获得了一个电影数据库,我正在尝试按与我的电影信息分开的表中保存的用户评分进行排序。 我的问题是我的数据库没有电影的总体评级,而只有该电影附加的单个用户评级。但我想按总体平均评分排序 例如:
SELECT Movies.title, Movies.movie_id, Movies.poster, Ratings.rating
FROM Movies INNER JOIN Ratings
ON Movies.movie_id = Ratings.movie_id
WHERE genre LIKE '%action%' AND (origin = 'american')
ORDER BY Ratings.rating DESC;
*(选择评级只是为了向您展示值,我不需要在此查询之外使用它们) 这可以显示
+-------------------------+----------+------------------------------------+--------+
| title | movie_id | poster | rating |
+-------------------------+----------+------------------------------------+--------+
| The Baytown Outlaws | 2 | posters/The Baytown Outlaws.jpg | 5 |
| A Dark Truth | 8 | posters/A Dark Truth.jpg | 4 |
| A Dark Truth | 8 | posters/A Dark Truth.jpg | 3 |
| American Made | 14 | posters/American Made.jpg | 3 |
| Avengers: Age of Ultron | 4 | posters/Avengers Age of Ultron.jpg | 3 |
| Romeo Must Die | 1 | posters/Romeo Must Die.jpg | 3 |
| Avengers: Age of Ultron | 4 | posters/Avengers Age of Ultron.jpg | 2 |
| Fast & Furious 6 | 3 | posters/Fast & Furious 6.jpg | 2 |
| Olympus Has Fallen | 9 | posters/Olympus Has Fallen.jpg | 1 |
+-------------------------+----------+------------------------------------+--------+
现在,我想让我的查询根据电影标题选择组,添加该组的评分,计算该值的平均值,然后按该平均值对标题进行排序,并从返回结果中排除重复的标题名称 所以我理想的查询将返回:
+-------------------------+----------+------------------------------------+
| title | movie_id | poster |
+-------------------------+----------+------------------------------------+
| The Baytown Outlaws | 2 | posters/The Baytown Outlaws.jpg |
| A Dark Truth | 8 | posters/A Dark Truth.jpg |
| American Made | 14 | posters/American Made.jpg |
| Romeo Must Die | 1 | posters/Romeo Must Die.jpg |
| Avengers: Age of Ultron | 4 | posters/Avengers Age of Ultron.jpg |
| Fast & Furious 6 | 3 | posters/Fast & Furious 6.jpg |
| Olympus Has Fallen | 9 | posters/Olympus Has Fallen.jpg |
+-------------------------+----------+------------------------------------+
因此,这会返回按平均评分排序的我的电影信息,然后排除重复的标题
Baytown Outlaws 的评分为 5 -> 总体 5
《黑暗真相》有 2 个评分,分别为 4 和 3 -> 总体评分为 3.5,但仅显示一行电影信息
美国制造的 1 评分为 3 -> 总体 3
等等
我在弄清楚这个确切的查询或是否可能时遇到了很多麻烦。任何帮助或关键字建议都会很有用,因为我对 SQL 有点陌生,并且不知道它的所有优点。如果不可能,我也希望得到这样的回答,这样我就可以继续修改数据库系统,以遵循更好的系统来保存电影表中的总体评分。
最佳答案
COUNT(*)
和 SUM( rating)
的组合,按 movie_id
(或标题)分组。
像这样的事情:
SELECT Movies.title, Movies.movie_id, Movies.poster, SUM(Ratings.rating)/COUNT(*) AS avg_rating
FROM Movies INNER JOIN Ratings
ON Movies.movie_id = Ratings.movie_id
WHERE genre LIKE '%action%' AND (origin = 'american')
GROUP BY Movies.movie_id ORDER BY avg_rating DESC;
关于mysql - SQL ORDER BY 使用另一个表中的值,使用按重复项分组的方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59112862/