字节大数据开发一面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##字节#
大厂高频面试SQL题 文章被收录于专栏

收录字节、阿里、蚂蚁、美团、京东、百度、小红书、拼多多等大厂面试SQL题

全部评论
算是比较经典了
点赞 回复 分享
发布于 2023-03-24 11:15 湖北
这是同学真实的分享么
点赞 回复 分享
发布于 2023-03-24 11:09 山东
这是实习笔试题还是春招笔试题呀?
点赞 回复 分享
发布于 2023-03-23 10:22 湖北

相关推荐

07-16 17:55
门头沟学院 Java
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
评论
17
95
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务