以下 SQL 的执行环境为 HIVE 环境

0x01 面试 SQL 函数考点

一般围绕开窗函数做文章,首先我们了解下有哪些常用的开窗函数

函数名                    作用简介

待补充

0x02 数据集构造

用户登录数据集:user_name 是用户名, login_date 是用户登录日期

登录数据集示例

每日订单数据集

0x03 面试 SQL 实例(来自互联网)

  1. 找出连续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 -- 具体天数;
    

对应结果返回示例

  1. 有一张订单,需要每日汇总期初到现阶段所有的成交金额($$字节面试题$$)-- 窗口函数

-- 订单金额,每日累计求和
SELECT  *
       ,SUM(gmv) over(order by id)
FROM
(
	SELECT  id
	       ,SUM(gmv) AS gmv
	FROM jd_test4
	GROUP BY  id
) AS T;



Mirror文章信息

Mirror原文:查看原文

作者地址:0x8569e0F4231890DB856E06c14D17a25a4DF70f8E

内容类型:application/json

应用名称:MirrorXYZ

内容摘要:4wzs65zBf-B0IrTycTVdiC2jJDlY_Q5dFlSTnH_WPLE

原始内容摘要:WcwKGGbjj_13U6742_ZIl9cCMLRGtBHetZHHP7CYioU

区块高度:1384710

发布时间:2024-03-16 15:31:33