SQL ORDER BY使用另一个表中的值,并使用由重复项分组的方程式

问题描述 投票:1回答:2

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

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-1,总分为5] >>

Dark Truth在4和3时有2个评分->总体评分为3.5,但仅显示一行电影信息

[美国制造的评分为3-3总分3] >>

我很难弄清楚这个确切的查询,或者甚至有可能。任何帮助或关键字建议都将非常有用,因为我对SQL不太熟悉,并且不了解其所有优点。如果不可能的话,我也希望得到这样的答复,以便我可以继续进行数据库系统的重新工作,而采用一种更好的系统将总体收视率保存在Movies表中。

我已经获得了一个电影数据库,我正在尝试按照保存在我的电影信息的单独表格中的用户评分来排序。我的问题是我的数据库没有电影的总体评分,...

mysql
2个回答
1
投票

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;

0
投票

可以使用AVG功能和多列分组依据。

© www.soinside.com 2019 - 2024. All rights reserved.