我有一张 table 电影
id release_year category_id rating
1 2015 1 8
2 2015 2 8.5
3 2015 3 9
4 2016 2 8.2
5 2016 1 8.4
6 2017 2 7
我想添加一个新专栏“avg_better_films”来查找其发行年份中所有更好的电影的平均评分
输出应该是
id release_year category_id rating avg_better_films
1 2015 1 8 8.75
2 2015 2 8.5 9
3 2015 3 9 Not Available
4 2016 2 8.2 8.4
5 2016 1 8.4 Not Available
6 2017 2 7 Not Available
而且你可以看到,当这部电影在发行年份获得最佳评级时,它将显示“不可用”
你知道如何在MySQL中获得这个输出吗?
3 回答
我们可以使用Correlated Subquery计算同年"better films"的平均评级 .
如果没有更好的电影和一年的电影,子查询将返回
null
.然后我们可以使用Coalesce()函数来处理当年没有找到"better film"的情况 .
感谢@Strawberry的评论,我们需要对子查询的结果做
+ 0
,以便MySQL将其视为数字请尝试以下方法:
SQL Fiddle: http://sqlfiddle.com/#!9/4960ea/3
您可以尝试使用标量子查询
这很棘手,因为您需要将结果输出为字符串,而不是数字 . 如果任何值是字符串,则所有值都必须为 .
我会推荐一个相关的子查询,看起来像:
笔记:
表别名应该是表名的缩写 .
如果没有行与子查询中的
WHERE
子句匹配,则AVG()
返回NULL
. 因此,COALESCE()
可以在子查询中 .FORMAT()
用于将平均评分转换为字符串 .