以下 SQL 的执行环境为 HIVE 环境
0x01 面试 SQL 函数考点
一般围绕开窗函数做文章,首先我们了解下有哪些常用的开窗函数
函数名 作用简介
待补充
0x02 数据集构造
用户登录数据集:user_name 是用户名, login_date 是用户登录日期
每日订单数据集
0x03 面试 SQL 实例(来自互联网)
- 找出连续7天登陆,连续30天登陆的用户(
小红书笔试
),最大连续登陆天数的问题 --窗口函数
思路解答:
-
假设数据集中用户在一天登录一次不重复,对于一个用户登录的天数做递增排序。
-
每天的登录日期减去登录的第几次,找到对应的连续登录的第一天
-
在用户维度对连续登录的第一天做计数过滤,得到对应连续登录的清单。
SELECT user_name ,first_day ,COUNT(1) AS cnt FROM ( SELECT * ,date_sub(to_date(login_date, "yyyy/mm/dd"),rn) AS first_day FROM ( SELECT * ,ROW_NUMBER() over(PARTITION BY user_name ORDER BY login_date ASC) AS rn from jd_test ) AS T ) AS T1 GROUP BY user_name ,first_day HAVING cnt >= 2 -- 具体天数;
- 有一张订单,需要每日汇总期初到现阶段所有的成交金额($$字节面试题$$)-- 窗口函数
-- 订单金额,每日累计求和
SELECT *
,SUM(gmv) over(order by id)
FROM
(
SELECT id
,SUM(gmv) AS gmv
FROM jd_test4
GROUP BY id
) AS T;
评论 (0)