![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Hive SQL
文章平均质量分 62
Whacky-u
这个作者很懒,什么都没留下…
展开
-
Hive SQL必刷练习题:复购率问题(*****)
去看90天内“某商品复购率 = 近90天内购买它至少两次的人数 ÷ 购买它的总人数”截至最后一天位置,也就是“今天“,表中的最新的一天。首先分析两个度量值,原创 2024-03-24 16:32:06 · 450 阅读 · 0 评论 -
Hive SQL必刷练习题:排列组合问题【通过join不等式】
方法1:可以直接通过join,最后on是一个不等式【排列组合问题的解决方式】– 先通过高级聚合函数 开窗 将当前行的值到最后一行的队伍名封装到一个集合中。– 然后将集合再炸裂开 并将两个队伍名字相同的行过滤掉即可得出想要的结果。 也还有种思路,我就是想这样,不过没成功,就是通过炸裂函数+开窗。– 通过理解题意 明白了每个队伍只比一次其实就是一个数学的关联问题。– 所以就想到了使用开窗函数和高级聚合函数和炸裂函数。方法2:也可以是提前多加一列,加上一个序号。这种问题,就是数学的排列不等式,原创 2024-03-23 14:39:38 · 682 阅读 · 0 评论 -
Hive SQL必刷练习题:同一个会话划分问题(*****)
关键在于,找到开始不属于上一个会话,或者说不属于上一个组的那个时间点,所以就需要对每一行进行判断,如果他和上一个时间点还是属于同一组的,那就标记一个值,如果不是同一个组了,就需要标记一个明显可以区分开的值。之后我如果把这个标记累加起来【从最早之前到现在】,你可以发现是一个会话的,就是1,之后就会累加成2。 判断同一个用户,如果连续访问的时间间隔小于60s,就认为是同一个会话,或者说划分到同一个组。如果这个时间差值小于60,我给标记一个1,大于60标记一个0。原创 2024-03-22 13:12:43 · 377 阅读 · 1 评论 -
Hive SQL必刷练习题:留存率问题(*****)
其实这类问题的关键在于,你要想办法将每个用户的最初登录时间和第二天登录时间这两个信息,放到一行中。这就是先求出来初次登陆时间后,然后借助这个表进行left join,之后再此基础上以最初登录时间进行分组group by,再用聚合函数即可。但是还有一种思路,就是直接进行开窗排序,然后用row_number排序,找到前两名的日期,这个用where筛选,并且在查询条件里面用max,和min聚合函数可以找到首日和第二日,第一个日期就是首日,第二个就是第二次登录日期,只要看这个第二次登录日期是不是首日的第二天就行。原创 2024-03-21 23:20:02 · 1243 阅读 · 1 评论 -
Hive SQL必刷练习题:日期交叉问题(两种思路)
了。原创 2024-03-20 22:32:57 · 552 阅读 · 1 评论 -
Hive SQL必刷练习题:向用户推荐朋友收藏的商品(两种思路)
首先明确,这个好友关系表,是互为好友,所以也就是说如果想要找到所有用户的每一个人的所有朋友,需要看用户1 id的朋友 + 用户2 id的朋友。原创 2024-03-19 11:44:32 · 874 阅读 · 0 评论 -
Hive SQL必刷练习题:连续问题 & 间断连续(*****)
所以总的来说,要么就是用开窗函数对日期进行排序,然后当前日期减去排序序号,去看日期一样的就是连续操作的记录 当然,如果想用统计间断连续的方法去看连续n天的问题,也可以,就是取一个lag(),或者取一个lead(),进行开窗,不用加标记,直接一个where过滤diff=2,这就是统计连续3天的用户,不过同一个用户可能会有多个这个符合条件的,最后需要去重count(distinct(user_id))。如果是为了找到连续3天登录过的用户。原创 2024-03-18 22:40:29 · 1187 阅读 · 0 评论 -
Hive SQL必刷练习题:同时在线人数问题(*****)
可以借助union all,不能是union all,因为进来可能时间一样,直播间id一样,但是不能去重,毕竟进来一个就会算作一个人。2、 另外就是union的使用,两个表union的时候,是按照上面那个表的列名字去用作。最终表的列名字,并且两个表的列的个数,每一列的属性类型都要一一对应。 因为有进直播间时间,和出直播间人数。1、 这个题的解决思路,用数字代表计算人数,最后统计数字。 所以可以给进直播间的时间。原创 2024-03-17 09:43:27 · 466 阅读 · 1 评论