MySQL练手题——电影评分(外连接、分组、排序)

一、准备工作

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将两个数据拼接在一起。得到最后结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值