当前位置: 首页 > 面试经验 >

字节大数据开发一面SQL题【2023/03/22】

优质
小牛编辑
84浏览
2023-03-28

字节大数据开发一面SQL题【2023/03/22】

问题描述:

  • 有一张tmp表,字段分别是 开始时间start_date,结束时间end_date,欠费金额amount

2015-03-02 2015-03-05 10
2015-03-04 2015-03-06 20

输出描述:用户每天需要还的金额


2015-03-02 10
2015-03-03 10
2015-03-04 30
2015-03-05 30
2015-03-06 20

分析:根据题目描述的输入输出,很容易知道思路哈,就是想要把从开始时间到结束时间的每一条数据都拆开存储,然后根据日期去聚合就可以得到每天的欠费金额了,所以难点就在于如何根据一个起始时间来进行拆分呢?

  • 一行转多行,让我们可以想到的就是使用炸裂函数explode/posexplode,显然我们想要的是 生成开始时间到结束时间的长度,然后遍历这个长度,在开始时间上进行累加就可以得到所有日期了,因此使用posexplode才可以完成这个目标。
  • 总结:posexplode可以用于生成动态日期序列

代码:


select
date,
sum(amount) as total_amount
from (
select
date_add(start_date,id) as date, amount
from tmp
lateral view posexplode(split(space(datediff(end_date,start_date)),' ')) t as id,t_date
) t
group by date
;

~~ps:这是昨天字节一面的一个同学分享给我的一个SQL面试题目,希望大家多总结自己不会的题目!!!有面试中遇到的问题都可以记录下来分享给我,我会就一些比较经典的问题来进行解答然后分享出来~~

#你觉得今年春招回暖了吗##大数据开发面经##HQL##字节#
 类似资料: