Cover photo

大厂SQL面试题整理汇总

以下 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. 有一张订单,需要每日汇总期初到现阶段所有的成交金额(字节面试题字节面试题)-- 窗口函数

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