“书中自有颜如玉”,至少在那一刻我是愿意相信的,哈哈哈。
知识的力量在那一刻被具象化了。
缘由
她很着急地找到我,说是她的领导要让她做一个数据,比较着急,她尝试了很多方法都不太理想。要处理的数据说多也多,说不多也确实不算多,手动慢慢处理也可以做完,但是现在就是没有太多时间了。
看着她十分焦急,我也就当仁不让了。
凭借好多年都不怎么使用过Excel了,果然折腾了大约十分钟也是无果。
毕竟是从业十几年了,怎么可能在这样一个小事上翻车呢?更何况还是此情此景。
灵光一闪,我想到了DuckDB。
问题
现在有两张表格:直播时间表live
和订单表order
。
- 直播时间表
记录了主播直播的时间段。
日期 | 直播时间段 | 主播 |
---|---|---|
2023-10-08 | 19:20-21:30 | 主播A |
2023-10-09 | 17:00-18:00 | 主播A |
2023-10-09 | 19:00-21:00 | 主播B |
2023-10-09 | 14:00-16:00 | 主播C |
2023-10-10 | 14:00-15:30 | 主播D |
2023-10-10 | 16:00-19:00 | 主播D |
2023-10-10 | 13:30-14:00 | 主播A |
2023-10-10 | 19:30-20:30 | 主播C |
- 订单表
记录了主播直播时的用户下单数据。
支付时间 | 金额 |
---|---|
2023-10-10 18:27:22 | 299 |
2023-10-10 18:15:29 | 129 |
2023-10-10 18:05:01 | 299 |
2023-10-10 17:49:30 | 299 |
2023-10-10 17:48:57 | 129 |
2023-10-10 17:37:44 | 99 |
2023-10-10 16:33:02 | 249 |
2023-10-10 21:50:11 | 299 |
2023-10-10 13:38:48 | 99 |
现在需要计算每位主播带来的成交金额?
这个场景在职场还是比较常见的,如果是你,你会怎么处理呢?如果有更好的处理方法,欢迎评论。
解决
且看我是如何一步步解决这个问题的
- 使用DBeave创建DuckDB数据库
对于该步骤还不熟悉的同学可以查看文章结尾的相关文章
- 查看数据
select * from 'E:\live.csv';
select * from 'E:\order.csv';
- 对
live
表进行处理
我们的目的是要得到直播的开始时间和结束时间,所以需要先把直播时间段
分割后,然后再与日期
列进行合并。
select *, string_split(直播时间段, '-') tm from 'E:\live.csv';
通过观察,使用string_split
函数将字符串分割。分割后tm
列为数组
然后将日期
列与tm
列拼接,生成start_time
和end_time
列。
select *, strptime