MYSQL练题笔记-子查询-电影评分

2023-12-12 14:21

本文主要是介绍MYSQL练题笔记-子查询-电影评分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、题目相关内容

1)相关的表

2)题目

3)帮助理解题目的示例,提供返回结果的格式

二、自己初步的理解

1.字典序是指从前到后比较两个字符串大小的方法。 首先比较第1个字符,如果不同则第1个字符较小的字符串更小,一直这样子比较下去。 比如:s1:ABCDE 和 s2:ABCCE 两个字符串,s1的 D 比 s2的 C要更加大一点,所以s1 > s2。

然后百度到这些的时候我还以为要用到字符串比较的数据。

2.(movie_id, user_id)是唯一值那就是说一个用户只能评论一个电影一次呗,感觉要是是真实情况这样应该是不行的。

3.我思考是认为先解决第一个问题,评论电影数量最多的用户名,但是如果相等,就返回字典序较小的用户名;主要是我对这个部分完全想不到怎么写,所以我还是打算看题解了,我丢居然只需要order by,根本不需要max(),是我该学习啊。

三、题解展示和分析

题解如下,这样分组看比较有可读性。

# 评论电影数量最多且字典序较小的用户名

SELECT sub.name AS results
FROM( SELECT u.name
FROM Users u
JOIN MovieRating mr ON u.user_id = mr.user_id
GROUP BY 1
ORDER BY COUNT(*) DESC, 1
LIMIT 1) sub

UNION ALL
# 2020年2月份平均评分最高且字典序较小的电影名
(SELECT title
FROM Movies m
JOIN MovieRating mr ON m.movie_id = mr.movie_id AND created_at BETWEEN '2020-02-01' AND '2020-02-29'
GROUP BY 1
ORDER BY AVG(rating) DESC, 1
LIMIT 1)

1.既然是用union就先解决第一个问题-评论电影数量最多且字典序较小的用户名

1)这里利用子查询,没有直接查询name,可能是考虑了union里面不能order by 但是子句里可以,但是union all后面的查询语句不在子句里啊,我也不知道为啥能成功,在此留个疑问吧。

2)然后利用自连接把用户名和用户评分表连接起来。

3)然后group by 1就是根据第一列分组,也就是user_id这一列,如果自连接的时候user表放后面就不能这样使用了。

4)Order by 1指的是按select的第一个字段排序,通过order by 进行排序,根据count(*)降序即可,根本不用利用max()。

5)然后利用limit 输出第一条记录即可。

2.然后要使用union all因为有可能电影名和用户名是相同的,所以使用union的时候要思考和判断一下是否要加all

3.解决第二个问题-2020年2月份平均评分最高且字典序较小的电影名

其实这个总的结构和解决第一个问题是差不多的,只是多了个where条件限制在2020年2月份,然后要想到可以利用avg()进行排序,那这个问题就解决了。

四、总结

1.字典序是指从前到后比较两个字符串大小的方法;

2.日期范围可以利用between and或者<= 和>;

3.只需要输出某个值最大的时候可以用排序加上limit 1。

这篇关于MYSQL练题笔记-子查询-电影评分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/484936

相关文章

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

SQL Server 中的 WITH (NOLOCK) 示例详解

《SQLServer中的WITH(NOLOCK)示例详解》SQLServer中的WITH(NOLOCK)是一种表提示,等同于READUNCOMMITTED隔离级别,允许查询在不获取共享锁的情... 目录SQL Server 中的 WITH (NOLOCK) 详解一、WITH (NOLOCK) 的本质二、工作

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方