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

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

要求输出格式如下:

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

通过case when 的转换,把列的项目转换成行字段,有两种方法供参考,其中第一个方法较为简洁。
一、行列转换汇总求和
1、利用cese when语句先分别对销售员判断,然后得到每个销售员每日的销售金额。销售员原来为列里的一项,通过case when 转换为行的项目

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


3、按月份、销售员汇总
1)、因销售记录中时间字段是具体的日期,题目要求是按照“月份”分组,需要用date_format函数把日期转为月份。
2)、对销售员按照“月份”汇总,在case when 筛选的基础上再用sum求和,得到每个销售员每个月总的销售金额。

得到查询结果:

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

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


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

得到要求的结果如下:

【本题考点】
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值。下列字符和字符串是常用的:

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

