暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL解决实际问题(2)

牛谈琴 2021-07-29
614

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以上' endas 销售区间,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(numover() 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以上' endas 销售区间,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解决实际问题

如何计算某一个项目占总体的比重:

我们需要查看整体的数量,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元销售量`),4as 占比
from 工作;

复制

输出结果为:

0.0202

第二种写法使用case when

使用case when

select sum(case when 是否为荷花形象店=1 then `零售250-270元销售量` end)/sum(`零售250-270元销售量`from 工作

复制

输出结果与前文一致。

这个地方说明,如果是为荷花形象店=1
 然后就计算零售250-270元销售量
的值.

(完)


文章转载自牛谈琴,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论