字节大数据开发一面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##字节#
全部评论
这是实习笔试题还是春招笔试题呀?
点赞 回复 分享
发布于 2023-03-23 10:22 湖北
这是同学真实的分享么
点赞 回复 分享
发布于 2023-03-24 11:09 山东
算是比较经典了
点赞 回复 分享
发布于 2023-03-24 11:15 湖北

相关推荐

去B座二楼砸水泥地:不过也可以理解,这种应该没参加过秋招
点赞 评论 收藏
分享
17 96 评论
分享
牛客网
牛客企业服务