SQL面试题挑战08:补全缺失日的月销售累计

目录

  • 问题:
  • SQL解决:
  • 补充:repeat函数和space函数

问题:

现有一张员工的销售记录表,表样式如下。现在需要统计每个员工在2023年10月份,截止到每天的月累计销售额。注意:存在有的员工在某几天是没有销售记录的。

   sale_date   emp_id  emp_name sale_amount'2023-10-02' ,'101' ,'张三' , 1000 '2023-10-03' ,'101' ,'张三' , 3000 '2023-10-05' ,'101' ,'张三' , 4000 '2023-10-10' ,'101' ,'张三' , 2000 '2023-10-13' ,'101' ,'张三' , 5000 '2023-10-15' ,'101' ,'张三' , 4000 '2023-10-27' ,'101' ,'张三' , 2000  '2023-10-01' ,'102' ,'李四' , 1111 '2023-10-03' ,'102' ,'李四' , 2222 '2023-10-08' ,'102' ,'李四' , 3333 '2023-10-11' ,'102' ,'李四' , 111 '2023-10-23' ,'102' ,'李四' , 4550 '2023-10-28' ,'102' ,'李四' , 6666 

SQL解决:

如果是每个员工在每天都有销售记录,那么直接开窗就可以计算出来当月截至到每天的累计销售额。现在由于销售记录有缺失,他虽然在某天没有销售记录,但是他是有当月累计销售额的,且当月累计销售额与前一天的累计销售额一样,这种依然需要统计出来。所以我们首先考虑将每个人每天的销售记录补齐,当天没有销售记录的那么销售额给0,然后就可以开窗计算当月截至到每天的累计销售额了。

with temp as (
select '2023-10-02' as sale_date,'101' as emp_id,'张三' as emp_name, 1000 as sale_amount
union all
select '2023-10-03' as sale_date,'101' as emp_id,'张三' as emp_name, 3000 as sale_amount
union all
select '2023-10-05' as sale_date,'101' as emp_id,'张三' as emp_name, 4000 as sale_amount
union all
select '2023-10-10' as sale_date,'101' as emp_id,'张三' as emp_name, 2000 as sale_amount
union all
select '2023-10-13' as sale_date,'101' as emp_id,'张三' as emp_name, 5000 as sale_amount
union all
select '2023-10-15' as sale_date,'101' as emp_id,'张三' as emp_name, 4000 as sale_amount
union all
select '2023-10-27' as sale_date,'101' as emp_id,'张三' as emp_name, 2000 as sale_amount
union all 
select '2023-10-01' as sale_date,'102' as emp_id,'李四' as emp_name, 1111 as sale_amount
union all
select '2023-10-03' as sale_date,'102' as emp_id,'李四' as emp_name, 2222 as sale_amount
union all
select '2023-10-08' as sale_date,'102' as emp_id,'李四' as emp_name, 3333 as sale_amount
union all 
select '2023-10-11' as sale_date,'102' as emp_id,'李四' as emp_name, 111 as sale_amount
union all
select '2023-10-23' as sale_date,'102' as emp_id,'李四' as emp_name, 4550 as sale_amount
union all
select '2023-10-28' as sale_date,'102' as emp_id,'李四' as emp_name, 6666 as sale_amount
)select dt,t1.emp_id,t1.emp_name,nvl(t2.sale_amount,0) as sale_amount,sum(if(t2.sale_amount is null ,0,t2.sale_amount))over(partition by t1.emp_id order by t1.dt) as total_sale_amount
from  
(selectdate_add(t.start_date,tab.pos) as dt,t.emp_id,t.emp_namefrom(selectemp_id,emp_name,'2023-10-01' as start_date,'2023-10-31' as end_datefrom tempgroup by emp_id,emp_name)tlateral view posexplode(split(repeat(',',datediff(end_date,start_date)),',')) tab as pos,val
) t1
left join
(selectsale_date,emp_id,emp_name,sale_amountfrom temp
)t2
on t1.dt=t2.sale_date and t1.emp_id=t2.emp_id and t1.emp_name=t2.emp_name
;

补充:repeat函数和space函数

1、repeat函数
在 Hive 中,REPEAT 函数用于将指定字符串重复多次,返回一个新的字符串。它的语法如下:

REPEAT(str, n)

其中,str 表示要重复的字符串,n 表示要重复的次数。

sql1:
SELECT REPEAT('hello', 3) as words;
---结果为
words
hellohellohellosql2:
SELECT repeat(',',datediff('2023-10-05','2023-10-01')) as symbol;
---结果为:
symbol
,,,,sql3:
select posexplode(split(repeat(',',datediff('2023-10-05','2023-10-01')),',')) as (pos,val); ----4个逗号,其实是5个位置
---结果为:
pos                val	
0	
1 	
2
3
4

备注:repeat 多和posexplod或explode等函数一起使用;

2、space函数
在 Hive 中,SPACE 函数用于返回由多个空格组成的字符串。它的语法如下:

SPACE(n)

其中,n 表示空格的数量。

sql1:
SELECT SPACE(5) as symbol;
---结果为
symbolsql2:
select posexplode(split(space(datediff('2023-10-05','2023-10-01')),'')) as (pos,val); ----4个空格,其实是5个位置
---结果为:
pos                val	
0	
1 	
2
3
4

备注:space多和posexplod或explode等函数一起使用;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/585992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于表格太大了jupyter无法单次处理的问题

记录下自己的心路历程…耗时耗精力 我用的数据库单个表格就很大,一个表格有30多G,jupyter无法处理这么大的表格,会直接把电脑的进程全部结束掉,结束掉要是能运行成功倒也行啊,然鹅…给我报错说处理不了,罢工…

【SpringCloud】从实际业务问题出发去分析Eureka-Server端源码

文章目录 前言1.EnableEurekaServer2.初始化缓存3.jersey应用程序构建3.1注册jeseryFilter3.2构建JerseyApplication 4.处理注册请求5.registry() 前言 前段时间遇到了一个业务问题就是k8s滚动发布Eureka微服务的过程中接口会有很多告警,当时…

vue路由传参

声明式导航传参 1 动态路由传参 路由规则path -> /article/:aid 导航链接 <router-link to"/article/1">查看第一篇文章</router-link> 组件获取参数: this.$route.params.aid 2 查询参数传参数 /路径?参数1值&参数2值 路由规则path ->…

next.js 开发网站的hello world

本文介绍建立一个简单的next.js 工程&#xff0c;以及简单修改。然后也简单说了2种路由方式的选择。 开始next.js工程前需要node.js &#xff0c; 还需要编辑器&#xff0c;我这里选择的是visual code。如果没有安装node.js 请参考下&#xff1a; visual code 下的node.js的he…

PathWave Device Modeling (IC-CAP) 建模系统——IC-CAP概述

建模系统 PathWave Device Modeling&#xff08;IC-CAP&#xff09;建模系统用于测量半导体器件并分析器件的电路建模特性以及分析所得数据。 要使用PathWave Device Modeling&#xff08;IC-CAP&#xff09;&#xff0c;您需要以下设置&#xff1a; 一台工作站执行直流、电…

linux端数据库管理工具推荐DBeaver

我的是 Ubuntu 系统安装步骤&#xff1a; 下载 DBeaver&#xff1a; 前往 DBeaver 的官方网站&#xff0c;选择适用于 Linux 的版本&#xff08;通常是以压缩包形式提供&#xff09;。 解压下载的文件&#xff1a; 打开终端&#xff0c;导航到下载的压缩文件所在的目录&#x…

今年近三万人报考北大研究生,最高学费80多万!

全国硕士研究生招生考试已经接近尾声&#xff0c;今年总共有近3万名考生报考北京大学硕士研究生。而北大计划招生的研究生是7349人&#xff0c;按这个比例计算的话相当于4:1&#xff0c;也就是平均 4 个人当中会有一个人被录取&#xff0c;我感觉这比高考容易多了。 2023年北大…

关于openssh 9.5 p1以上版本ssh-keygen -t rsa报错解决—— 筑梦之路

背景说明 执行命令ssh-keygen -t rsa 提示unknown key type rsa 执行命令ssh-keygen -t dsa 提示unknown key type dsa 从官方文档中看到9.5以后ssh-keygen 默认使用Ed25519加密算法&#xff0c;详情请阅读&#xff1a;OpenSSH: Release Notes 从官方文档中可查&#xff0c;…

各个版本的gradle下载

gradle-6.5-bin.zip 链接&#xff1a;https://pan.baidu.com/s/1HZlluvM8EalUgPs-5JKPgA?pwdqmzb 提取码&#xff1a;qmzb gradle-5.6.4-all.zip 链接&#xff1a;https://pan.baidu.com/s/1hpQsCRMRfOSNYItSQONapQ?pwdeq8v 提取码&#xff1a;eq8v

基于ElementUI二次封装el-table与el-pagination分页组件[实际项目使用]

效果&#xff1a; 二次封装el-table组件 <template><div><!-- showHeader:是否显示头部size:表格的大小height:表格的高度isStripe:表格是否为斑马纹类型tableData:表格数据源isBorder:是否表格边框handleSelectionChange:行选中&#xff0c;多选内容发生变化回…

Zama TFHE-rs白皮书(2)

前序博客有&#xff1a; 基于[Discretized] Torus的全同态加密指引&#xff08;1&#xff09;基于[Discretized] Torus的全同态加密指引&#xff08;2&#xff09;TFHE——基于[Discretized] Torus的全同态加密 代码解析Zama TFHE-rsZama TFHE-rs白皮书&#xff08;1&#xff…

推荐系统/电商中的 业务指标GMV

GMV&#xff08;Gross Merchandise Volume&#xff09;是指在一定时间内&#xff0c;一个电商平台上所有商品的总销售价值&#xff0c;通常以货币单位&#xff08;例如美元、人民币等&#xff09;表示。GMV是一个关键的电商业务指标&#xff0c;用于衡量平台的交易规模和业务增…

Linux:apache优化(5)—— 隐藏版本号

防盗链&#xff1a;就是防止别人盗取你们公司的图片、文件、视频 作用&#xff1a;防盗链就是防止别人盗用服务器中的图片、文件、视频等相关资源。运维人员可以通过apache提供rewrite模块进行优化。 配置项&#xff1a; RewriteEngine ON ##打开网页重写功能 RewriteCond …

ubuntu 守护进程 supervisor

# 安装 apt-get install supervisor# 检查 echo_supervisord_conf# 查看配置文件所在位置 # [include] # files /etc/supervisor/conf.d/*.conf ps -ef | grep supervisorcd /etc/supervisor/conf.d/lscat frp.conf[program:frp] command /data/work/frp/frpc -c /data/work/…

修改源码,element的el-table合并,处理合并产生的hover样式问题

1、确认自己element-ui的版本号 2、此element-ui下的lib包是修改过hover样式的包,如何替换自己文件下的node_modules中的包 修改后将lib文件夹中文件替换你项目中/node_module/element-ui/Lib中的文件问题??如果替换开发环境中的node_module的包无法升级到测试环境,因为nod…

联合办公靠谱吗?

提起联合办公&#xff0c;许多人可能会想到喧嚣的开放式办公区、精巧的咖啡吧台以及随处可见的共享会议室。随着工作模式的更新迭代&#xff0c;联合办公无疑已经成为了现代办公室文化的热门趋势。但面对这种浪潮&#xff0c;不少人仍然保持着观望的态度&#xff0c;不免产生疑…

无表情包不MEME,PADD 最具潜力的BRC20 meme

BRC20 出圈&#xff0c;PADD 埋伏正当时 近期&#xff0c;市场向好&#xff0c;BRC20 在一定程度上推动了牛市的进程&#xff0c;基于BRC20的生态正在蓬勃发展&#xff0c;meme coin 已经成为生态中不可或缺的一部分&#xff01; 投资 meme coin 要的是以小博大&#xff0c;sat…

【Flink-Kafka-To-Mysql】使用 Flink 实现 Kafka 数据写入 Mysql(根据对应操作类型进行增、删、改操作)

【Flink-Kafka-To-Mysql】使用 Flink 实现 Kafka 数据写入 Mysql&#xff08;根据对应操作类型进行增、删、改操作&#xff09; 1&#xff09;导入依赖2&#xff09;resources2.1.appconfig.yml2.2.application.properties2.3.log4j.properties2.4.log4j2.xml 3&#xff09;uti…

0x45 点分治

0x45 点分治 到目前为止&#xff0c;我们用数据结构处理的大多是序列上的问题。这些问题的形式一般是给定序列中的两个位置 l l l和 r r r&#xff0c;在区间 [ l , r ] [l,r] [l,r]上执行查询或修改指令。如果给定一棵树&#xff0c;以及树上两个节点 x x x和 y y y&#xff…

jQuery日历签到插件下载

jQuery日历签到插件下载-遇见你与你分享