面试题来源于社群内的一位具有五年数仓开发经验的同学在面试美团的时候记录的SQL题
~~如果有对其中任意一道题目的答案有疑问的同学,可以在评论区和我进行讨论~~
订单基础表order_base ------------------- order_id 订单id bus_id 商家id user_id 用户id amt 支付金额 dt 日期【分区】
-- 统计每个月支付金额排名前3的用户id select month ,user_id from ( select month ,user_id ,row_number() over(partition by month order by total_amt desc) as rn from ( select date_format(dt, '%Y-%m') as month ,user_id ,sum(amt) as total_amt from order_base group by month, user_id ) t ) t where rn <= 3 ; -- 统计每个用户每个月的最大支付金额和截止到该月的总支付金额 select useid ,month ,max(month_max_actual_amt) as month_max_actual_amt ,max(total_actual_amt) as total_actual_amt from ( select user_id ,date_format(dt, '%Y-%m') as month ,max(amt) over(partition by user_id, date_format(dt, '%Y-%m')) as max_amt ,sum(amt) over(partition by user_id order by date_format(dt, '%Y-%m')) as total_amt from order_base ) t group by month, user_id ;
日期节气表jq_t --------------- dt 日期 jieqi 节气【比如立夏】
select t1.dt ,t1.jieqi ,t2.season from info t1 left join ( select dt ,jieqi ,season ,lead(dt, 1, '99999999') over(order by dt) as next_dt from ( select dt ,jieqi ,case when jieqi = '立春' then '春' when jieqi = '立夏' then '夏' when jieqi = '立秋' then '秋' else '冬' end as season from info where jieqi in ('立春','立夏','立秋','立冬') ) t ) t2 on 1=1 where t1.dt >= t2.dt and t1.dt < t2.next_dt ;
有兴趣的可以看一下我笔记里面总结的常见HQL面试题:2023最新大数据开发面试笔记V4.0
不要一味的认为SQL很简单,总结的一些复杂需求还是非常有难度的,并且面试经常会考!!!
#数据人的面试交流地##大数据##SQL练习##面经##社招#