# 大厂SQL面试题整理汇总 **Published by:** [0xFF00FF](https://paragraph.com/@0xff00ff/) **Published on:** 2024-03-16 **URL:** https://paragraph.com/@0xff00ff/sql ## Content 以下 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; ## Publication Information - [0xFF00FF](https://paragraph.com/@0xff00ff/): Publication homepage - [All Posts](https://paragraph.com/@0xff00ff/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@0xff00ff): Subscribe to updates