前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >打工人打工魂!销售分析案例来啦!

打工人打工魂!销售分析案例来啦!

作者头像
猴子数据分析
发布2023-09-06 10:57:15
1430
发布2023-09-06 10:57:15
举报
文章被收录于专栏:猴子数据分析

某公司要了解1月、2月各个销售员的销售情况怎么样?销售记录表如下:

要求输出格式如下:

【解题思路】

此题主要考察 case when 行列的转换问题,即如下图所示:

通过case when 的转换,把列的项目转换成行字段,有两种方法供参考,其中第一个方法较为简洁。

一、行列转换汇总求和

1、利用cese when语句先分别对销售员判断,然后得到每个销售员每日的销售金额。销售员原来为列里的一项,通过case when 转换为行的项目

代码语言:javascript
复制
select
case when 销售员='小明' then 销售额 else 0 end as 小明日销额,
case when 销售员='小张' then 销售额 else 0 end as 小张日销额,
case when 销售员='小王' then 销售额 else 0 end as 小王日销额,
case when 销售员='小李' then 销售额 else 0 end as 小李日销额
from 销售记录表;

2、加上日期字段进行查询

代码语言:javascript
复制
select 日期,
case when 销售员='小明' then 销售额 else 0 end as 小明日销额,
case when 销售员='小张' then 销售额 else 0 end as 小张日销额,
case when 销售员='小王' then 销售额 else 0 end as 小王日销额,
case when 销售员='小李' then 销售额 else 0 end as 小李日销额
from 销售记录表;

3、按月份、销售员汇总

1)、因销售记录中时间字段是具体的日期,题目要求是按照“月份”分组,需要用date_format函数把日期转为月份。

2)、对销售员按照“月份”汇总,在case when 筛选的基础上再用sum求和,得到每个销售员每个月总的销售金额。

代码语言:javascript
复制
select date_format(日期,'%Y %m') as 月份,
sum(case when 销售员='小明' then 销售额 else 0 end) as 小明,
sum(case when 销售员='小张' then 销售额 else 0 end) as 小张,
sum(case when 销售员='小王' then 销售额 else 0 end) as 小王,
sum(case when 销售员='小李' then 销售额 else 0 end) as 小李
from 销售记录表
group by date_format(日期,'%Y %m');

得到查询结果:

二、临时表查询

1、利用cese when语句先分别对销售员判断,得到每个销售员每日的销售金额,销售员原来为列里的一项,通过case when 转换为行的项目

代码语言:javascript
复制
select 日期,
case when 销售员='小明' then 销售额 else 0 end as 小明日销额,
case when 销售员='小张' then 销售额 else 0 end as 小张日销额,
case when 销售员='小王' then 销售额 else 0 end as 小王日销额,
case when 销售员='小李' then 销售额 else 0 end as 小李日销额
from 销售记录表;

2、把第一步的查询作为一个临时表a,然后对表a的查询结果按月份进行汇总查询。

代码语言:javascript
复制
select date_format(a.日期,'%Y %m') as 月份
,sum(a. 小明日销额) as 小明
,sum(a.小张日销额) as 小张
,sum(a. 小王日销额)  as 小王
,sum(a. 小李日销额) as 小李
from
(select 日期,
case when 销售员='小明' then 销售额 end as 小明日销额,
case when 销售员='小张' then 销售额 end as 小张日销额,
case when 销售员='小王' then 销售额 end as 小王日销额,
case when 销售员='小李' then 销售额 end as 小李日销额
from 销售记录表)a
group by  date_format(a.日期, '%Y %m');

上面的结果与题意要求的还有些差距,因“小李”1月份没有销售额,该值为NULL,因题意要求为0,利用case when 把NULL改为 0,调整代码如下:

代码语言:javascript
复制
select date_format(a.日期,'%Y %m') as 月份
,case when sum(a.小明日销额) is NULL then 0 else sum(a.小明日销额)  end as 小明
,case when sum(a.小张日销额) is NULL then 0 else sum(a.小张日销额)  end as 小张
,case when sum(a.小王日销额) is NULL then 0 else sum(a.小王日销额)  end as 小王
,case when sum(a.小李日销额) is NULL then 0 else sum(a.小李日销额)  end as 小李
from
(select 日期,
case when 销售员='小明' then 销售额 end as 小明日销额,
case when 销售员='小张' then 销售额 end as 小张日销额,
case when 销售员='小王' then 销售额 end as 小王日销额,
case when 销售员='小李' then 销售额 end as 小李日销额
from  销售记录表) a
group by  date_format(a.日期, '%Y %m');

得到要求的结果如下:

【本题考点】

1、重点考查用case when语句进行列数据转换和条件判断,在实际工作中,这个语句是经常用到的

case when <判断表达式> then <表达式> else <表达式> end

另外,case when有两种格式:简单函数,搜索函数。他们的用法,详见case when 函数的详细介绍。

2、case when表达式的聚合,可以用sum,max,avg等对筛选的表达式结果再进行一次聚合,如:

sum(case when <判断表达式> then <表达式> else <表达式> end )

3、年+月的表达方法

SQL中,单独的对字段取年、月,用相应的函数

year(日期字段) 对日期字段取年份

month(日期字段) 对日期字段取月份

但是,要取“年+月”,可以采用函数

date_format(date,format)

date_format(date,format )函数为SQL中设置时间格式的函数,其中括号里的“date”是要设置的日期,“format” 是设置成规定日期/时间的格式。根据format字符串格式化date值。下列字符和字符串是常用的:

格式化日期常用的字符串:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 猴子数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档