gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:56:54 24 4
gpt4 key购买 nike

我得到了一个电影数据库,我正在尝试通过保存在我的电影信息的单独表中的用户评分进行排序。
我的问题是我的数据库没有电影的整体评分,但只有附加到该电影的单一用户评分。但我想按整体平均评分排序
例如:

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;

*(选择评分只是为了向您展示值(value),我不需要在此查询之外使用它们)
这可以显示
+-------------------------+----------+------------------------------------+--------+
| 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 有 1 个评分为 5 -> 总体 5

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

American Made 有 1 个评分,评分为 3 -> 总体评分为 3

等等。

我在弄清楚这个确切的查询时遇到了很多麻烦,或者是否有可能。任何帮助或关键字建议都会很有用,因为我对 SQL 有点陌生并且不知道它的所有优势。如果不可能,我也会很感激这样的回答,这样我就可以继续修改数据库系统,转而遵循更好的系统来保存 Movies 表中的整体评级。

最佳答案

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com