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 则会全部显示。

代码实现

sql 复制代码
(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)

测试结果

相关推荐
reasonsummer7 分钟前
【办公类-115-01】20260906育儿知识(家园小报)批量制作(2026年9月-2027年6月)
开发语言·数据库·c#
AC赳赳老秦17 分钟前
环保监测公开数据应用:OpenClaw 抓取空气与水质公开监测数据,开展区域环境质量趋势分析
大数据·数据库·人工智能·python·php·deepseek·openclaw
Zhu75830 分钟前
部署安全的pg数据库,搭配pgadmin实现web界面管理
前端·数据库·安全
她说..1 小时前
Redis项目实战整理
数据库·redis·缓存
kyrie_sakura1 小时前
MySQL数据库学习笔记1 -- 基础概念,sql语句
数据库·学习·mysql
凌云若寒1 小时前
CODESOFT试用流程
linux·运维·网络·数据库·sentinel
云贝贝贝1 小时前
Oracle 运维高频 6 坑:硬日期、AUTOEXTEND、闪回、锁、FRA、双引号
运维·数据库·oracle
九月要晚安1 小时前
从数据库到湖库一体
数据库
正在走向自律1 小时前
FastGPT高并发登录故障根治方案:50人并发报错、PostgreSQL、MongoDB数据库深度优化手册
数据库·mongodb·postgresql
姜穆澜1 小时前
时空数据处理全攻略
数据库