我有以下格式的数据:
用户身份 | 用户名 | 电影评分 | 电影名 |
---|---|---|---|
1 | X | 1 | asd1 |
1 | X | 3 | asd2 |
1 | X | 5 | asd3 |
1 | X | 5 | asd4 |
2 | 是的 | 2 | asd4 |
2 | 是的 | 3 | asd5 |
2 | 是的 | 4 | asd6 |
我想以 best_rated_movie 和 best_rated_movie 为数组的格式提取每个用户的最佳和最差评分电影(因为用户可以拥有多个最差电影等):
用户身份 | 用户名 | best_rated_movie | 最差的电影 |
---|---|---|---|
1 | X | (asd3,asd4) | asd1 |
2 | 是的 | asd6 | asd4 |
我设法提取表以输出我只有最好和最差评分的电影:
用户 | 用户名 | 电影评分 | 电影名 |
---|---|---|---|
1 | X | 1 | asd1 |
1 | X | 5 | asd3 |
1 | X | 5 | asd5 |
2 | 是的 | 2 | asd4 |
2 | 是的 | 4 | asd6 |
这是我用于此的代码:
with best_movie_rating as (
select
user_id,
max(movie_rating) as max_rating
from source_table
group by user_id
),
worst_movie_rating as (
select
user_id,
min(movie_rating) as min_rating
from source_table
group by user_id
),
columns_final as (
select
t1.user_id,
t1.user_name,
t1.company_name,
t1.movie_rating,
t1.movie_name
from source_table t1
inner join best_movie_rating t2
on t1.user_id = t2.user_id
inner join worst_movie_rating t3
on t1.user_id = t3.user_id
where (t1.movie_rating= t2.max_rating and t1.user_id = t2.user_id)
or (t1.movie_rating= t3.min_rating and t1.user_id = t3.user_id)
)
select * from columns_final
不幸的是,我不知道如何前进,我尝试过聚合但没有成功(尤其是在使用数组的情况下)。我至少会很感激如何处理这个问题的建议。