大数据开发 SQL实现用户之间关注问题 用户关注问题 场景:现有用户表 follows,两个字段 uid、to_uid,uid 表示当前用户,to_uid 表示关注的用户。 找出相互关注的用户 SELECT t1.uid, t1.to_uid FROM follows t1 JOIN follows t2 yuziyue 19 Jul 2023 · 2 min read
大数据开发 SQL实现取中位数 场景:Employee 表包含所有员工,该表有三列:员工Id、公司名、薪水,写SQL查询来查找每个公司的薪水中位数,有两种方法实现 方法1:正序+倒序排名 -- 如果员工数为基数:rnk1 = rnk2 -- 如果员工数为偶数:rnk1 = rnk2-1 或者 rnk2+1 yuziyue 19 Jul 2023 · 1 min read
大数据开发 SQL实现等比例抽样 场景:有用户表 user_info,字段 uid, city。现运要选 10w 人发调查问卷,要求所选人群的 city 分布,和全量用户的 city 分布一致。 思路: 开窗函数求出每个城市的占比。 row_number 按照随机排序,也就是打乱数据。 yuziyue 19 Jul 2023 · 1 min read
大数据开发 SQL行转列与列转行总结 多行转成一行,也就是所谓的行转列,比如一个uid的数据原来要多行来展示,现在把一个 uid 的数据浓缩到一行上,所以列就会增加,即行转列。场景:现有用户表 student_score,包含 3 个字段 uid, subject, score yuziyue 19 Jul 2023 · 2 min read
大数据开发 SQL实现滑动窗口功能 场景1:假设用户访问记录表 records 有 3 个字段,uid、url(用户访问url)、datetime(访问 url 的时间),问找出 url 在 5 分钟内被访问次数大于 10 次的用户,以及访问次数大于 10 次的开始时间点。 yuziyue 19 Jul 2023 · 1 min read
大数据开发 SQL实现多条记录按照时间合并 场景:假设用户一天会有很多次上网,每次上网时间段都有两个字段 login_at、logout_at 表示登录时间和登出时间,如果这样的时间段非常多的会产生很多的记录日志。现在假设用户上一次 logout_at 的时间与下一次的 login_at yuziyue 19 Jul 2023 · 2 min read
大数据开发 SQL实现用户连续登录问题 思路:使用 row_number 解决 去重,即每个用户每一天只会有一天记录 row_number() over(partition by userid,login_at order by login_at) ,如果有重复的取出第一个。 ROW_NUMBER 按照 userid 分组,在组内按照登陆时间升序编上号。 yuziyue 19 Jul 2023 · 2 min read