一、准备工作
Create table If Not Exists Movies (movie_id int, title varchar(30));
Create table If Not Exists Users (user_id int, name varchar(30));
Create table If Not Exists MovieRating (movie_id int, user_id int, rating int, created_at date);
Truncate table Movies;
insert into Movies (movie_id, title) values ('1', 'Avengers');
insert into Movies (movie_id, title) values ('2', 'Frozen 2');
insert into Movies (movie_id, title) values ('3', 'Joker');
Truncate table Users;
insert into Users (user_id, name) values ('1', 'Daniel');
insert into Users (user_id, name) values ('2', 'Monica');
insert into Users (user_id, name) values ('3', 'Maria');
insert into Users (user_id, name) values ('4', 'James');
Truncate table MovieRating;
insert into MovieRating (movie_id, user_id, rating, created_at) values ('1', '1', '3', '2020-01-12');
insert into MovieRating (movie_id, user_id, rating, created_at) values ('1', '2', '4', '2020-02-11');
insert into MovieRating (movie_id, user_id, rating, created_at) values ('1', '3', '2', '2020-02-12');
insert into MovieRating (movie_id, user_id, rating, created_at) values ('1', '4', '1', '2020-01-01');
insert into MovieRating (movie_id, user_id, rating, created_at) values ('2', '1', '5', '2020-02-17');
insert into MovieRating (movie_id, user_id, rating, created_at) values ('2', '2', '2', '2020-02-01');
insert into MovieRating (movie_id, user_id, rating, created_at) values ('2', '3', '2', '2020-03-01');
insert into MovieRating (movie_id, user_id, rating, created_at) values ('3', '1', '3', '2020-02-22');
insert into MovieRating (movie_id, user_id, rating, created_at) values ('3', '2', '4', '2020-02-25');
# 请你编写一个解决方案:
# 查找评论电影数量最多的用户名。如果出现平局,返回字典序较小的用户名。
# 查找在 February 2020 平均评分最高 的电影名称。如果出现平局,返回字典序较小的电影名称。
# 字典序 ,即按字母在字典中出现顺序对字符串排序,字典序较小则意味着排序靠前。
查找评论电影数量最多的用户名,数量相等按字典序较小的用户名排序。
查找2020-02平均分最高的电影名称,分数相等按字典序较小的电影名称排序。
输入:
输出:
二、分析
查找评论电影数量最多的用户名,数量相等按字典序较小的用户名排序。
查找2020-02平均分最高的电影名称,分数相等按字典序较小的电影名称排序
由于查询的字段不同,又需要把两张那个表的数据放在一个表格里(如输出所示),需要将两个表查出来的数据使用union all拼接在一起;
三、实现
(
select
u.name results
from users u
left join movierating m
on u.user_id = m.user_id
group by u.name
order by count(*) desc,u.name asc
limit 1
)
union all
(
select
title results
from movies m1
left join movierating m2
on m1.movie_id = m2.movie_id
and year(created_at)='2020'
and month(created_at)= '02'
group by title
order by avg(rating) desc ,title asc
limit 1
) ;
四、总结
分别对需求的两个要求所需要到的数据进行表的链接,对其进行分组排序,取第一条数据,查询出两个数据之后使用union all将两个数据拼接在一起。得到最后结果。