mysql - SQL ORDER BY 使用另一个表中的值,使用按重复项分组的方程

标签 mysql

我已经获得了一个电影数据库,我正在尝试按与我的电影信息分开的表中保存的用户评分进行排序。 我的问题是我的数据库没有电影的总体评级,而只有该电影附加的单个用户评级。但我想按总体平均评分排序 例如:

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/

相关文章:

php - 如何设置phpmyadmin的用户名和密码

mysql - 如何在使用 COUNT 时显示 MySQL 查询的所有结果?

Mysql查询返回太多结果

c# - 如何使用C#在MYSQL中建立连接后定义数据库

mysql - 无法启动服务 MySQL.error 0

mysql - MySQL SQL 查找给定范围内的数字

mysql - Win7 上全新完整安装 MySQL。没有提示输入用户名?

mysql - wso2 DAS 使用 mysql + 集群 APIM,无法显示此错误的统计信息

mysql - 选择最后一个值并与同一个表连接

mysql - 从 2 个不同列中提取数据的单个下拉列表