SQL-每日一题【1341. 电影评分】

题目

表:Movies

表:Users

 

请你编写一个解决方案:

  • 查找评论电影数量最多的用户名。如果出现平局,返回字典序较小的用户名。
  • 查找在 February 2020 平均评分最高 的电影名称。如果出现平局,返回字典序较小的电影名称。

字典序 ,即按字母在字典中出现顺序对字符串排序,字典序较小则意味着排序靠前。

返回结果格式如下例所示。

示例 1:

 

  

 

解题思路

1.题目要求我们查找评论电影数量最多的用户名和在 February 2020 平均评分最高 的电影名称,并且按要求返回。对于查询字段不同的题目,我们可以分别进行查询后再将两个答案联合在一起。

2.首先我们查询评论电影数量最多的用户名,我们先将movieRating表和users表进行左连接,连接条件是user_id相等,然后我们按照user_id将记录进行分组,用count(*)计算出每一组的记录数,使用降序排序,再使用name的字典顺序进行排序,返回第一条记录。

3.其次我们再查询在 February 2020 平均评分最高 的电影名称,我们也是先将MovieRating表和movie表进行左连接,连接条件是 movie_id 相等,然后将日期规定在‘2020-02’,最后按照movie_id进行分组 计算出每一组的平均值,先按平均值的降序排序,再按title的字典顺序排序,返回第一条记录

4.最后我们将查询到的两个结果进行联合,注意这里我们要使用 union all 而不是 union 是因为在使用 union 时,若电影的 title 和观看者的 name 相同时,只会显示一条记录。而 union all 则会全部显示。 

代码实现

(select u.name as results
from MovieRating as m
left join users as u 
on m.user_id = u.user_id
group by m.user_id
order by count(*) desc, u.name
limit 1)
union all
(select mo.title
from MovieRating as m
left join movies as mo
on m.movie_id = mo.movie_id
where m.created_at like '2020-02%'
group by mo.movie_id
order by avg(m.rating) desc, mo.title
limit 1)

测试结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值