0729记录一些具体的问题,然后再进行计算
多条件统计分组数据
我们在实际的业务需求中会遇见统计某一个区间内的数值以及比例。
分别统计0-60,61-120,121-180....241-300之间各有多少人以及比例
主要用到 case when
以及 group by
我们首先写一个简单的分组
select
(case when 零售250-270 >= 0 and 零售250-270 <=60 then '0-60'
when `零售250-270元销售量` >=61 and `零售250-270元销售量` <= 120 then '61-120'
when `零售250-270元销售量` >= 121 and `零售250-270元销售量` <= 180 then '121-180'
when `零售250-270元销售量` >= 181 and `零售250-270元销售量` <= 240 then '181-240'
when `零售250-270元销售量` >= 241 and `零售250-270元销售量` <= 300 then '241-300'
else '300以上' end) as 销售区间,count(*) num
from 工作
where 是否可开展品吸 = 1
group by 销售区间;复制
输出结果为:
销售区间 num
181-240 25
121-180 80
61-120 309
0-60 133
241-300 3复制
接下来需要做的就是求出每个部分占总体的比例
select 销售区间,num,num/sum(num) over() as 占比
from (
select
(case when `零售250-270元销售量` >= 0 and `零售250-270元销售量` <=60 then '0-60'
when `零售250-270元销售量` >=61 and `零售250-270元销售量` <= 120 then '61-120'
when `零售250-270元销售量` >= 121 and `零售250-270元销售量` <= 180 then '121-180'
when `零售250-270元销售量` >= 181 and `零售250-270元销售量` <= 240 then '181-240'
when `零售250-270元销售量` >= 241 and `零售250-270元销售量` <= 300 then '241-300'
else '300以上' end) as 销售区间,count(*) num
from 工作
where 是否可开展品吸 = 1
group by 销售区间) t
order by 销售区间复制
输出结果为:
销售区间 num 占比
0-60 133 0.2418
121-180 80 0.1455
181-240 25 0.0455
241-300 3 0.0055
61-120 309 0.5618复制
前文已经说了如何窗口函数进行汇总,不再赘述,感兴趣的小伙伴可以查阅:
如何计算某一个项目占总体的比重:
我们需要查看整体的数量,SQL语句走起:
select count(*) as 数量 from 工作;
复制
输出结果为: 1679
我们要查看荷花形象店销量的情况,使用SQL语句为:
select count(*) as 数量
from 工作
where `是否为荷花形象店` = 1;复制
输出结果为 30
. 这样两者相除为 30 1679 = 1.79 %
现在需要做的是在一张表中进行查询需要使用 case when
进行描述
具体的写法为:
select sum(case 是否为荷花形象店 when 1 then 1 else 0 end) / count(*) as 占比
from 工作复制
输出结果为:
0.0179
上述代码的含义为在是否为荷花形象店
中,如果是 1 那么就记为 1 , 如果是 0 就结束,所以就可以统计有多少个荷花店的门店,然后再除以总数。然后我们使用 round
concat
函数进行合并,将其转化为百分比,具体结果为:
select concat(round(100*(sum(case 是否为荷花形象店 when 1 then 1 else 0 end) / count(*)),2),'%') as 占比
from 工作;复制
输出结果为:
1.79%
百分数的写法需要使用round
concat
函数进行拼接
求某一类产品的销量占总的销量
与上一个问题类似,上一个问题是求某一个产品占总的产品的比重,这一个问题是求某一个产品的销量占总的销量的多少,一开始没有做对,后来在群里面的小伙伴的帮助下解决了,这个问题其实很简单,多写几个 select
即可
如果使用笨办法做就是分别计算出总体和品牌的情况,然后汇总
select sum(`零售250-270元销售量`) as 销量1 from 工作;
复制
总的销量为 142229
然后看有终端的地方销量为:
select sum(`零售250-270元销售量`) as 销量2 from
工作
where 是否为荷花形象店 = 1;复制
最后相除即可。
但是我们用一行命令可以写为:
select round((select sum(`零售250-270元销售量`) from 工作 where 是否为荷花形象店 = 1)/ sum(`零售250-270元销售量`),4) as 占比
from 工作;复制
输出结果为:
0.0202
第二种写法使用case when
使用case when
select sum(case when 是否为荷花形象店=1 then `零售250-270元销售量` end)/sum(`零售250-270元销售量`) from 工作
复制
输出结果与前文一致。
这个地方说明,如果是为荷花形象店=1
然后就计算零售250-270元销售量
的值.
(完)