8,徐雨秋 9,孙皓然

6.png

需求:现在我们想通过table1表获取获奖员工的更多信息。

select * from test.`16_table1` inner join `16_table2` `16t2` on `16_table1`.id = `16t2`.id;

运行结果:

7.png


(17)计算用户留存情况


数据源:user_login.csv

8.png

需求:我们想看用户的次日留存数、三日留存数、七日留存数(只要用户首次登录以后再登录就算留存下来了),该怎么实现呢?


解题思路:本题有两种解题思路,先看思路一:按照用户时间求出七日留存,首先按uid分组,求出每个uid的第一次登陆时间和最后一次登陆时间,算出中间间隔的时间,如果间隔为1就是次日留存,间隔为3就是3日留存,间隔为7就是7日留存,以此类推分别求出他们的数量。思路二:按照当日时间求出七日留存,如果用户登陆的时间正好等于当前日期前一天的日期,则去重统计uid数量即为次日留存数,以此类推分别求出三日留存、七日留存。

运行结果:

写法一:

9.png

写法二: 10.png



(18)筛选最受欢迎的课程


数据源:course_table.csv

11.png

需求:现在我们想知道最受欢迎的课程是哪一门。


解题思路:解法一通过按照course分组,按照course_count降序排序,取第一个值即为最受欢迎的课程,但是这种写法在一定程度上不严谨,比如说course_count最大值一样多,也就所说的并列第一,那么使用第一种方法就不能把所有最喜欢的课程都取出来。来看看第二种写法,通过使用rank窗口函数得出并列第一的值,通过where = 1,即可以全部取出最受欢迎的课程。

运行结果:

12.png


(19)筛选出每个年级最受欢迎的三门课程


数据源:course_table.csv

需求:现在我们想知道每个年级最受欢迎的三门课程

解题思路:通过运用窗口函数,分组求Top N

运行结果:

13.png

根据此题也可以求出每个年级最受欢迎的课程,这里我不用窗口函数,使用连接子查询:

运行结果:

14.png


(20)求累积和


数据源:consum_order_table.csv

15.png

需求:现在我们想看下80%的订单金额最少是由多少用户贡献的

解题思路:第一步按uid分组,求出每个uid的amount和,第二步在生成累积和的时候需要按照订单金额进行降序排列,这样就可以得到最少的人数,第三步利用子查询获取到全部的订单金额,求出小于总额80%的uid的数量

运行结果:

16.png


(21)获取新增用户数


数据源:user_reg_table.csv

17.png

需求:我们想获取某一天的新增用户数,以及该天对应的过去7天内每天的平均新增用户数


解题思路:我们以2020-1-1那一天为例,首先通过case when 让reg_time = 设定的那一天,求出uid的数量即为某一天的新增用户数。然后求出2020-1-1向前7天的reg_time,求出uid的数量除以7即可得出过去7天内每天的平均新增用户数

运行结果:

18.png


(22)获取用户首次购买时间


数据源:first_order_table.csv

19.png 需求:我们想获取每个用户的首次购买时间,以及首次购买时间是否在最近7天内

解题思路:首先按uid分组,求出每个uid的首次订单时间,然后通过case when判断首次订单时间是否大于当日七天之前的时间,如果大于则首次购买时间在最近7天内,如果小于则首次购买时间不在最近7天内

运行结果:

20.png


(23)同时获取用户和订单数据


数据源:user_reg_table.csv、first_order_table.csv


需求:现在我们想获取过去7天每天的新增用户数、订单数、下单用户数


解题思路:首先求过去7天每天新增用户数,再求过去7天每天新增订单数、下单用户数,两个表join即可得到需求

运行结果:

21.png


(24)随机抽样


数据源:user_reg_table.csv、first_order_table.csv


需求:现在我们想从用户表中随机抽取5个用户,并获取这5个用户的历史购买订单数


解题思路:我们要随机抽取5个用户并获取他们的历史购买订单数,首先需要生成每个用户的历史购买订单数,然后从中随机抽取5个。具体的思路为利用rand()函数生成随机数,然后利用order by进行排序,最后利用limit将前5条数据显示出来,运行结果如下表所示。

运行结果:

22.png


(25)获取沉默用户数


数据源:user_reg_table.csv、first_order_table.csv


需求:现在我们想获取沉默用户的数量,沉默的定义是已注册但最近30天内没有购买记录的用户


解题思路:先求出最近三十天已经有购买记录的用户,再求出所有已经注册的用户。两个表连接,得出第一列为所有已经注册的用户,第二列则为最近三十天购买记录的用户,如果不能连接为null,最后求出null值的个数即为最近30天有购买记录的用户


(26)获取新用户的订单数


数据源:user_reg_table.csv、first_order_table.csv


需求:现在我们想获取最近7天注册的新用户在最近7天内的订单数是多少


解题思路:第一步,求出最近7天注册的新用户,第二步,求出最近7天下订单的用户和订单数,第三步,两表连接,第二列为null值为最近7天新注册没下订单的用户,否则为下订单的用户,求出第三列的个数即为获取最近7天注册的新用户在最近7天内的订单数

运行结果:

23.png


(27)获取借款到期名单


数据源:loan_table.csv

34.png

需求:这张表包含id、loan_time(借款时间)、expire_time(到期时间)、reback_time(还款时间)、amount(金额)和status(还款状态,1表示已还款、0表示未还款)六个字段,我们想获取每天到期的借款笔数、借款金额和平均借款天数

运行结果:

24.png


(28)获取即将到期的借款信息


数据源:loan_table.csv


需求:我们想知道有多少笔借款会在未来7天内到期,以及其中有多少笔是已经还款的


解题思路:先获取今日到未来7天所有的还款日期,求出count(id)即为借款会在未来7天内到期的数量,在计算出目前状态为还款的数量。

运行结果:

1.png


(29)获取历史逾期借款信息


数据源:loan_table.csv


需求:我们想知道历史逾期的借款笔数和金额,以及至今还逾期的借款笔数和金额


解题思路:这里面的关键信息在于,逾期怎么判断,对到期时间和还款时间进行比较,如果是逾期且现在已经还款的,可以直接比较到期时间和还款时间,如果还款时间大于到期时间,则说明是逾期的;还有一种是逾期且至今还未还款的,这种情况是没有还款时间的,也就是还款时间为空,但是到期时间是在今天之前,说明已经到期但是未还款。

运行结果:

2.png


(30)获取部门工资最高的员工


数据源:Employee.csv、Department.csv

Id,Name
2,Sales

需求1:如何求出Employee表薪水最高的员工(含重复值)

运行结果:

3.png

需求2:求出部门工资最高的员工(含重复值)

运行结果:

4.png



(补)求连续登陆三天的用户


表结构:

5.png

解题思路:


第一步首先按照id,和date分组,

第二步,使用窗口函数,按照id分区,按日期排序,

第三步,使用date_sub函数让date向前移动cum天

第四步,按照id,result_date分组,求出result_date的个数,并取出result_date>3的个数即为连续登陆3天以上的用户

具体代码:

(补)某互联网公司面试题


表结构:

比如说001用户12号的数据为null,就需要拿10号或者14号的数据去补,而不是拿15号

思路:先做笛卡尔乘积,再取时间差的绝对值的最小值,再分组排序,取第一个

具体测试数据:

6.png

测试代码:

运行结果:

7.png

但是我这里的写法可能不太好,因为用户日活数据表数据量可能比较大,在做笛卡尔积的时候会性能较低。







不需要编写代码,也能成为Hive SQL面试高手?ChatGPT告诉你...
当你面对 Hive SQL 面试时,不仅需要掌握 SQL 语言的基本知识,还需要熟练掌握 Hive SQL 的一些高级特性,比如窗口函数、分区等等。对于初学者而言,写出高效的 Hive SQL 代码往往是一件困难的事情,而这恰恰是面试官最为看重的。但是,你不必担心!现在,有一种神奇的工具——ChatGPT,可以帮助你快速生成 Hive SQL 代码,解决你在面试中遇到的各种难题。本文将会介绍如何使用 ChatGPT 生成 Hive SQL 代码,让你在面试中轻松成为 Hive SQL 面试高手,无需编写代码也能毫不费力地完成面试题。 让我们一起来看看吧!
求职指南!给数据开发的SQL面试准备路径!⛵
大量的数据科学职位需要精通 SQL,它也是数据分析师、数据科学家、数据建模岗最常考核的面试技能。在本篇内容中 ShowMeAI 将梳理汇总所有面试 SQL 问题,按照不同的主题构建练习专项块。
面试现场!月薪3w+的这些数据挖掘SQL面试题你都掌握了吗? ⛵
真实面试题分享!本文基于餐饮业数据,使用SQL分析挖掘客户的就餐模式、点餐花费和菜品喜好等,以提升餐厅的业务经营水平。
[-] .\Navicat-Cracker NavicatCrackerDlg.cpp:332 -3All patch solutions are suppressed. Patch abort!HI