IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【DW组队学习—Wonderful SQL】决胜秋招 -> 正文阅读

[大数据]【DW组队学习—Wonderful SQL】决胜秋招

目录

Ch6.决胜秋招

Section A

练习一:各部门工资最高的员工(难度:中等)

练习二: 换座位(难度:中等)

练习三: 分数排名(难度:中等)

练习四:连续出现的数字(难度:中等)

练习五:树节点 (难度:中等)

练习六:至少有五名直接下属的经理 (难度:中等)

练习七:查询回答率最高的问题 (难度:中等)

练习八:各部门前3高工资的员工(难度:中等)

练习九:平面上最近距离 (难度: 困难)

练习十:行程和用户(难度:困难)

Section B

练习一:行转列

练习二:列转行

练习三:谁是明星带货主播?

练习四:MySQL 中如何查看sql语句的执行计划?可以看到哪些信息?

练习五:解释一下 SQL 数据库中 ACID 是指什么

Section C

练习一:行转列

练习二:列转行

练习三:连续登录

练习四:用户购买商品推荐

?练习五:hive 数据倾斜的产生原因及优化策略?

练习六:LEFT JOIN 是否可能会出现多出的行?为什么?


Ch6.决胜秋招

Section A

练习一:各部门工资最高的员工(难度:中等)

创建Employee 表,包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id。

创建Department 表,包含公司所有部门的信息。

?

?

编写一个 SQL 查询,找出每个部门工资最高的员工。例如,根据上述给定的表格,Max 在 IT 部门有最高工资,Henry 在 Sales 部门有最高工资。

?

?

每个派生表都要有别名

练习二: 换座位(难度:中等)

小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。

其中纵列的id是连续递增的

小美想改变相邻俩学生的座位。

你能不能帮她写一个 SQL query 来输出小美想要的结果呢?

请创建如下所示seat表:

?

?

假如数据输入的是上表,则输出结果如下:

?

注意:

如果学生人数是奇数,则不需要改变最后一个同学的座位。

*这题自己没有想出做法(看了答案之后发现是自己想的复杂了,我还想了用存储过程......),查了一下别人的答案,下面这个答案是通过更改ID号实现结果

?

练习三: 分数排名(难度:中等)

假设在某次期末考试中,二年级四个班的平均成绩分别是 93、93、93、91。

?

?

目前有如下三种排序结果,请根据查询结果书写出查询用 sql。

?

通过观察排序结果可以发现,其分别对应专用窗口函数中3中不同排序函数的排序结果。

?

练习四:连续出现的数字(难度:中等)

编写一个 SQL 查询,查找所有至少连续出现三次的数字。

?

?

例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。

?

*这道题也是自己想的有点复杂了(考虑了使用移动平均),参考了网上的做法,进行多表连接,将连续的3个值连成一行然后进行筛选并去重(考虑到有3个以上连续的可能会筛出重复值)。

?

练习五:树节点 (难度:中等)

对于tree表,id是树节点的标识,p_id是其父节点的id。

?

?

每个节点都是以下三种类型中的一种:

Root: 如果节点是根节点。

Leaf: 如果节点是叶子节点。

Inner: 如果节点既不是根节点也不是叶子节点。

写一条查询语句打印节点id及对应的节点类型。按照节点id排序。上面例子的对应结果为:

?

说明:

节点’1’是根节点,因为它的父节点为NULL,有’2’和’3’两个子节点。

节点’2’是内部节点,因为它的父节点是’1’,有子节点’4’和’5’。

节点’3’,‘4’,'5’是叶子节点,因为它们有父节点但没有子节点。

下面是树的图形:

?

注意:

如果一个树只有一个节点,只需要输出根节点属性。

?

使用CASE谓词时注意不要漏掉结尾的END

练习六:至少有五名直接下属的经理 (难度:中等)

Employee表包含所有员工及其上级的信息。每位员工都有一个Id,并且还有一个对应主管的Id(ManagerId)。

?

?

针对Employee表,写一条SQL语句找出有5个下属的主管。对于上面的表,结果应输出:

?

注意:

没有人向自己汇报。

?

练习七:查询回答率最高的问题 (难度:中等)

求出survey_log表中回答率最高的问题,表格的字段有:uid, action, question_id, answer_id, q_num, timestamp。

uid是用户id;action的值为:“show”, “answer”, “skip”;当action是"answer"时,answer_id不为空,相反,当action是"show"和"skip"时为空(null);q_num是问题的数字序号。

写一条sql语句找出回答率(show 出现次数 / answer 出现次数)最高的 question_id。

?

?

说明

问题285的回答率为1/1,然而问题369的回答率是0/1,所以输出是285。

注意:

最高回答率的意思是:同一个问题出现的次数中回答的比例。

?

*这个题感觉有点钻牛角尖了,想简化但是不知道怎么实现

练习八:各部门前3高工资的员工(难度:中等)

将练习一中的 employee 表清空,重新插入以下数据(也可以复制练习一中的 employee 表,再插入第5、第6行数据):

?

?

编写一个 SQL 查询,找出每个部门工资前三高的员工。例如,根据上述给定的表格,查询结果应返回:

?

此外,请考虑实现各部门前N高工资的员工功能。

?

练习九:平面上最近距离 (难度: 困难)

point_2d表包含一个平面内一些点(超过两个)的坐标值(x,y)。

写一条查询语句求出这些点中的最短距离并保留2位小数。

?

?

最短距离是1,从点(-1,-1)到点(-1,-2)。所以输出结果为:

?

注意

所有点的最大距离小于10000。

?

练习十:行程和用户(难度:困难)

Trips 表中存所有出租车的行程信息。每段行程有唯一键 Id,Client_Id 和 Driver_Id 是 Users 表中 Users_Id 的外键。Status 是枚举类型,枚举成员为 (‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’)。

?

?

Users 表存所有用户。每个用户有唯一键 Users_Id。Banned 表示这个用户是否被禁止,Role 则是一个表示(‘client’, ‘driver’, ‘partner’)的枚举类型。

?

?

写一段 SQL 语句查出2013年10月1日至2013年10月3日期间非禁止用户的取消率。基于上表,你的 SQL 语句应返回如下结果,取消率(Cancellation Rate)保留两位小数。

?

?

Section B

练习一:行转列

假设 A B C 三位小朋友期末考试成绩如下所示:

?

?

请使用 SQL 代码将以上成绩转换为如下格式:

?

?

练习二:列转行

假设 A B C 三位小朋友期末考试成绩如下所示:

?

?

请使用 SQL 代码将以上成绩转换为如下格式:

?

?

练习三:谁是明星带货主播?

假设,某平台2021年主播带货销售额日统计数据如下:

表名 anchor_sales

?

?

定义:如果某主播的某日销售额占比达到该平台当日销售总额的 90% 及以上,则称该主播为明星主播,当天也称为明星主播日。

请使用 SQL 完成如下计算:

  1. 2021年有多少个明星主播日?

【注】根据条件,每天只有一位主播可能达到标准,所以不加distinct也可以。但若是将标准改为40%以上,则极有可能出现重复项,此时需要考虑去除重复项。

?

  1. 2021年有多少个明星主播?

【注】会有一个人多次符合明星主播的条件,所以要筛选不重复项

?

练习四:MySQL 中如何查看sql语句的执行计划?可以看到哪些信息?

参考1、参考2

Mysql中查看执行计划的方式有两种:使用它俩的效果是一样的

  1. 使用desc:desc select <列名> from user
  2. 使用explain:explain select <列名> from user

可以获取信息如下:

?

字段

内容

id

包含一组数字,表示查询中执行select子句或操作表的顺序

这里会出现三种情况:

  1. 多行执行计划的id相同,这个时候表示自上而下依次执行
  2. 多行执行计划的id都不相同,id的值越大表示优先级越高,越早被执行
  3. 多行执行计划的id有相同有不同,此时就按照id来分组,同一组按照自上而下依次执行,不同组根据id的值来决定执行顺序,id越大优先级越高,越早被执行

select_type

表示多个select字句的类型,主要的类型有下面几种:

·simple:查询语句中不包含子查询或者union查询

·primary:查询中若包含任何复杂的子部分,最外层查询则被标记为:primary

·subQuery:select或where列表中包含了子查询,该子查询被标记为:subQuery

·derived:在from列表中包含的子查询被标记为:derived,表示衍生的意思

·若第二个select出现在union之后,则被标记为union;若union包含在from子句的子查询中,外层select将被标记为:derived

·从union表获取结果的select被标记为:union result

table

表示该语句查询的表

partitions

分区。对于查询分区表,显示查询的分区ID;对于非分区表,显示NULL

type

表示MySQL在表中找到所需行的方式,又称“访问类型”。常见的类型有:ALL、index、range、ref、eq_ref、const、system。从左到右,由最差到最好。

·ALL:full table scan,全表扫描

·index:index表示使用了索引,但缺点是扫描的是全表索引

·range:索引范围扫描,对索引的扫描开始于某一点、结束于某一点,返回匹配值域的行,常见于between、in、<、>等的查询

·ref:非唯一性索引扫描,返回匹配某个单独值的所有行。

·eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描

·const、system:当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键或者唯一索引置于where列表中,MySQL就能将该查询转换为一个常量。system是const类型的特例,当查询的表只有一行的情况下,使用system。

possible_keys

指出MySQL可能使用到的索引,但是实际上有没有使用时不确定的。另外如果此列的值为null,也有可能走了索引。因此这个列只作为一个参考值,主要是看下面的key列

key

显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL。

key_len

表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。

当是联合索引的时候,如果多列中只有其中几列使用到,对应key_len长度就是这几列的总长度之和。可以用来判断哪些条件用到索引,哪些条件没有用到索引,或者索引是否失效。

这里需要了解的是各种类型长度的计算,因为这个长度并不是在创建表时指定的长度(L)

·当是char的时候,长度是Lx3,另外如果该列可以为空,需要在计算的结果上加一

·当是varchar的时候,长度是Lx3+2,另外如果该列可以为空,需要在计算的结果上加一

·当是int类型的时候,固定长度为4,如果可以为空,就加一

·当是datetime类型的时候,在MySQL5.6版本之前是固定长度4,之后的版本固定长度为8,如果可以为空,加一即可

·当是timestamp类型的时候,固定长度为4,如果可以为空,就加一

ref

表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。

rows

表示MySQL根据表统计信息及索引选用情况,估算找到所需的记录所需要读取(扫描)的行数

filtered

返回结果的行占需要读到的行(rows列的值)的百分比,就是百分比越高,说明需要查询到数据越准确,百分比越小,说明查询到的数据量大,而结果集很少

Extra

包含不适合在其他列中显示但十分重要的额外信息

·Using index:该值表示相应的select操作中使用了覆盖索引,如果没有使用覆盖索引对应的值是Using index condition

·Using where:表示MySQL服务器在存储引擎收到记录后进行“后过滤”(Post-filter),如果查询未能使用索引,Using where的作用只是提醒我们MySQL将用where子句来过滤结果集

·Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询

·Using filesort:MySQL中无法利用索引完成的排序操作称为“文件排序”(分组也是一样)

练习五:解释一下 SQL 数据库中 ACID 是指什么

参考

ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必须要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。

·原子性(Atomicity)

原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

·一致性(Consistency)

事务前后数据的完整性必须保持一致。

·隔离性(Isolation)

事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离

·持久性(Durability)

持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

具有ACID特性的数据库支持强一致性,强一致性代表数据库本身不会出现不一致,每个事务是原子的,或者成功或者失败,事物间是隔离的,互相完全不影响,而且最终状态是持久落盘的,因此,数据库会从一个明确的状态到另外一个明确的状态,中间的临时状态是不会出现的,如果出现也会及时的自动的修复,因此是强一致的。

Section C

练习一:行转列

假设有如下比赛结果:

?

?

请使用 SQL 将比赛结果转换为如下形式:

?

?

练习二:列转行

假设有如下比赛结果:

?

?

请使用 SQL 将比赛结果转换为如下形式:

?

*这道题没有啥简便的思路,总不能一直union吧。。。

练习三:连续登录

有用户表行为记录表t_act_records表,包含两个字段:uid(用户ID),imp_date(日期)

构造表mysql如下:

?

?

  1. 计算2021年每个月,每个用户连续登录的最多天数
  2. 计算2021年每个月,连续2天都有登录的用户名单
  3. 计算2021年每个月,连续5天都有登录的用户数

练习四:用户购买商品推荐

假设现在需要根据算法给每个 user_id 推荐购买商品,推荐算法比较简单,推荐和他相似的用户购买过的 product 即可,说明如下:

·排除用户自己购买过的商品

·相似用户定义:曾经购买过 2 种或 2 种以上的相同的商品

?

?练习五:hive 数据倾斜的产生原因及优化策略?

练习六:LEFT JOIN 是否可能会出现多出的行?为什么?

假设 t1 表有6行(关联列 name 有2行为空),t2 表有6行(关联列 name 有3行为空),

那么 SELECT * FROM t1 LEFT JOIN t2 on t1.name = t2.name 会返回多少行结果?

可以参考下图

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:04:09  更:2022-10-31 12:07:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:15:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码