当前位置: 首页 > news >正文

MySQL基础练习题16-电影评分

题目

准备数据

分析数据

总结


题目

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

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

准备数据

## 创建库
create database db;
use sb;## 创建movies表
Create table If Not Exists Movies (movie_id int, title varchar(30));## 创建users表
Create table If Not Exists Users (user_id int, name varchar(30));## 创建MovieRating表
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');

 输入表:

movies表

 users表

movierating表

分析数据

结果分两个结果,且不相关,因此最后使用union  all进行连接。

1.Daniel 和 Monica 都点评了 3 部电影("Avengers", "Frozen 2" 和 "Joker") 但是 Daniel 字典序比较小。2.Frozen 2 和 Joker 在 2 月的评分都是 3.5,但是 Frozen 2 的字典序比较小。

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

第一步:查找评论电影数量最多的用户名。如果出现平局,返回字典序较小的用户名。

with t1 as (select user_id,count(rating) rating from movierating group by user_id
) select min(a.name) resultsfrom users ajoin t1 b on b.user_id = a.user_id
where b.rating = (select max(rating) rating from t1);

第二步:查找在 February 2020 平均评分最高 的电影名称。如果出现平局,返回字典序较小的电影名称。

with t2 as (select movie_id,avg(rating) ratingfrom movieratingwhere created_at between '2020-02-01' and '2020-02-29'group by movie_id
)select min(a.title) resultsfrom movies a join t2 b on b.movie_id = a.movie_id
where b.rating = (select max(rating) rating from t2);

第三步:将两个结果进行连接。

with t1 as (select user_id,count(rating) rating from movierating group by user_id
) ,t2 as (select movie_id,avg(rating) ratingfrom movieratingwhere created_at between '2020-02-01' and '2020-02-29'group by movie_id
)
select min(a.name) resultsfrom users ajoin t1 b on b.user_id = a.user_id
where b.rating = (select max(rating) rating from t1)
union all
select min(a.title) resultsfrom movies a join t2 b on b.movie_id = a.movie_id
where b.rating = (select max(rating) rating from t2);

总结

  1. UNION ALL是SQL中的一个操作符,‌用于将两个或多个SELECT语句的结果集合并成一个结果集。‌(所以要对结果进行个整理)
  2. UNION ALL的主要功能是将多个查询结果集合并成一个。‌与UNION操作符不同,‌UNION ALL会保留所有的行,‌包括重复的行。‌
  3. 使用UNION ALL时,‌每个SELECT语句中选取的列数必须相同,‌并且相应列的数据类型也必须兼容。‌
  4. 如果不需要去除重复的行,‌并且希望保留所有检索到的数据,‌包括重复的行,‌那么应该使用UNION ALL。‌
  5. UNION ALL返回的结果集不会进行排序,‌如果需要排序,‌应该在查询完成后使用ORDER BY子句进行手动排序。‌

http://www.lryc.cn/news/412514.html

相关文章:

  • CRMEB-众邦科技 使用笔记
  • npm与webpack的学习笔记
  • Vue 生命周期选项:2.x 与 3.x 的全面解析及案例分享二
  • Linux centos7 安装sftp
  • Java未来还是霸主吗?Java 在当今企业中的未来到底是什么?
  • 【C++】类和对象——Lesson2
  • 常用传感器讲解十五--触摸传感器(KY-036)
  • web后端--Spring事务管理
  • 【Docker系列】Docker 中-d 和-it 的区别
  • PHP回收废品平台系统小程序源码
  • IIS解析漏洞~ IIS7.漏洞分析
  • 基于python+django的病人人信息管理系统及安全策略分析设计与实现
  • 前端必知必会-html表单的input属性
  • 设计模式:详细拆解策略模式
  • Python正则表达式面试题分析总结
  • LeetCode题练习与总结:超过经理收入的员工--181
  • LInux:循环语句
  • NumPy和Pandas中的布尔索引
  • .NET 一款反序列化打入冰蝎内存马的工具
  • FPGA实现SDI视频接收转USB3.0传输,GS2971+FT601方案,提供4套工程源码和QT上位机源码
  • 2024第26届中国(深圳)国际清洁能源、储能科技与新型电力展览会
  • 计算机基础(Windows 10+Office 2016)教程 —— 第6章 电子表格软件Excel 2016(下)
  • npm install 巨慢,导致Jenkins编译报错问题解决——基础积累
  • Stable Diffusion 使用详解(5)---- 光影效果与场景融入
  • 5G三大场景:eMBB、mMTC、uRLLC
  • 数据结构(面试)
  • 从“人巡”到“智控”:EasyCVR智能视频监控技术变革河道违建监测模式
  • JAVA基础 - 反射
  • 【系统架构设计师】二十二、嵌入式系统架构设计理论与实践③
  • 【轨物推荐】经济长波:创新周期的历史