我有一张桌子 电影
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中获得此输出
答案 0 :(得分:1)
null
。Coalesce()
函数来处理当年没有发现“更好的电影”的情况。+ 0
,以便MySQL将其视为数字请尝试以下操作:
SELECT
t1.id,
t1.release_year,
t1.category_id,
t1.rating,
COALESCE(
(
SELECT AVG(t2.rating)
FROM Films AS t2
WHERE t2.rating > t1.rating AND -- higher rating films
t2.release_year = t1.release_year -- films from same year
) + 0,
'Not Available' -- handle null result of subquery
) AS avg_better_films
FROM Films AS t1
答案 1 :(得分:0)
您可以尝试使用标量子查询
select *, (select avg(rating) from Films b on a.release_year=b.release_year) as avg_film_Rating
from Films a
答案 2 :(得分:0)
这很棘手,因为您需要将结果输出为 string ,而不是数字。如果任何值是字符串,则所有值都必须是。
我会建议一个相关的子查询,如下所示:
If rd.Read() Then
If rd.GetString(4) = "small" Then
MessageBox.Show("small")
ElseIf rd.GetString(3) = "Big" Then
MessageBox.Show("big")
End If
End If
注意:
SELECT f.*,
(SELECT COALESCE(FORMAT(AVG(t2.rating), 2), 'Not Available)
FROM Films f2
WHERE f2.rating > f.rating AND
f2.release_year = f.release_year
) AS avg_better_films
FROM Films f
子句匹配,则WHERE
返回AVG()
。因此,NULL
可以在子查询中。COALESCE()
用于将平均评分转换为字符串。