【Leetcode】高频SQL基础题--1341.电影评分

【Leetcode】高频SQL基础题--1341.电影评分

复制代码
要求:请你编写一个解决方案:
查找评论电影数量最多的用户名。如果出现平局,返回字典序较小的用户名。
查找在 February 2020 平均评分最高 的电影名称。如果出现平局,返回字典序较小的电影名称。
字典序 ,即按字母在字典中出现顺序对字符串排序,字典序较小则意味着排序靠前。
返回结果格式如下例所示。

解题思路:

1、查找评论次数最多的用户​​(如果次数相同,则按用户名字典序取第一个)。

• ​​通过 INNER JOIN 内连接 将MovieRating表与Users表关联,确保只统计有评分记录的用户。使用GROUP BY MovieRating.user_id按用户ID分组,为后续聚合计算每个用户的评论总数做准备。

•​​ ORDER BY COUNT(MovieRating.user_id) DESC: 按评论次数降序排列,找到最活跃的用户。

•​​ ORDER BY ... Users.name ASC: 第二排序条件 ---​​当多个用户的评论次数相同时,按用户名升序排列,确保结果 deterministic(确定唯一用户)。

• LIMIT 1: 只取排名第一的用户。

2、查找2020年2月平均评分最高的电影​​(如果平均分相同,则按电影名字典序取第一个)。

​​• 通过 INNER JOIN 内连接 将MovieRating表与Movies表关联,确保只处理有评分记录的电影。WHERE子句筛选出2020年2月1日至2020年2月29日之间的评分记录(注意条件是< '2020-03-01',这是精准获取2月全月数据的推荐写法)。

• 使用GROUP BY MovieRating.movie_id按电影ID分组,计算每部电影的平均评分(AVG(MovieRating.rating))。

• ORDER BY AVG(MovieRating.rating) DESC: 按平均评分降序排列,找到评分最高的电影。

• ORDER BY ... Movies.title ASC: ​​ 第二排序条件 ---当多部电影平均评分相同时,按电影名升序排列,确保结果 deterministic(确定唯一电影)。

• LIMIT 1: 只取排名第一的电影。

3、最终用 UNION ALL将两个结果合并输出。

注意:

1、UNION、UNION ALL的语法

sql 复制代码
(
    ... -- 第一个子查询
)
UNION ALL
(
    ... -- 第二个子查询
)

2、次要排序条件很重要!

3、下面这个时间判断是有问题的,是闭区间,会包含2020-3-1

sql 复制代码
MovieRating.created_at between '2020-02-01' and DATE_ADD('2020-02-01', INTERVAL 1 Month)

代码:

sql 复制代码
(
    select Users.name as results
    FROM MovieRating
    JOIN Users 
    ON MovieRating.user_id = Users.user_id
    GROUP BY MovieRating.user_id
    ORDER BY
        count(MovieRating.user_id) desc,
        Users.name
    LIMIT 1
)
UNION ALL
(
    select Movies.title as results
    FROM MovieRating
    JOIN Movies ON MovieRating.movie_id = Movies.movie_id
    WHERE
        MovieRating.created_at >= '2020-02-01'
        AND MovieRating.created_at < '2020-03-01'
    GROUP BY MovieRating.movie_id
    ORDER BY
        avg(MovieRating.rating) desc,
        Movies.title
    LIMIT 1
)
相关推荐
我是咸鱼不闲呀4 分钟前
力扣Hot100系列22(Java)——[图论]总结(岛屿数量,腐烂的橘子,课程表,实现Trie(前缀树))
java·leetcode·图论
阿Y加油吧1 小时前
力扣打卡——搜索二维矩阵、相交链表
线性代数·leetcode·矩阵
短剑重铸之日1 小时前
《ShardingSphere解读》16 改写引擎:如何理解装饰器模式下的 SQL 改写实现机制?
java·数据库·后端·sql·shardingsphere·分库分表·装饰器模式
普贤莲花1 小时前
【2026年第11周---写于20260322】
程序人生·算法·leetcode
小白自救计划1 小时前
力扣知识点杂集
算法·leetcode·哈希算法
承渊政道1 小时前
【优选算法】(实战体验滑动窗口的奇妙之旅)
c语言·c++·笔记·学习·算法·leetcode·visual studio
umeelove352 小时前
SQL中的DISTINCT、SQL DISTINCT详解、DISTINCT的用法、DISTINCT注意事项
java·数据库·sql
@insist1232 小时前
数据库系统工程师-嵌入式 SQL 与存储过程核心原理与应试指南
数据库·sql·软考·数据库系统工程师·软件水平考试
承渊政道2 小时前
【优选算法】(实战感悟二分查找算法的思想原理)
c++·笔记·学习·算法·leetcode·visual studio code
重生之我是Java开发战士3 小时前
【递归、搜索与回溯】记忆化搜索:斐波那契数列,不同路径,最长递增子序列,猜数字游戏II,矩阵中最长递增路径
算法·leetcode·深度优先