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

SQL解决实际问题

牛谈琴 2021-07-28
307

各位僵尸粉好久不见 最近学的东西有点多,有点杂,正好碰到一个业务问题,复习一下前面学的内容:

工作中遇到了一个具体的问题,当时在用SQL进行处理,将处理过程记录下来方便后续学习。感谢群里的小伙伴热心帮助,回答问题。

具体的问题如下:

我需要计算城乡各自的终端数,以及城乡终端数占总数的比重

数据表如下:

市场类型
城镇
城镇
城镇
城镇
乡村
城镇
城镇
城镇
乡村

写法1:直接使用窗口函数

select 市场类型,count(*) as number,round(count(*)/sum(count(*)) over(),2percent
from 工作
group by 市场类型

复制

这个地方最关键的是对窗口函数的理解:

sum(count(*)) over()

复制

表示对总体进行求和,不需要分组和排序

一般常用的窗口函数为:

<窗口函数> over ([partition by <列清单> ] 

        order by <排序用列清单>)

复制

写法2:使用子查询

select 市场类型,num,num/sum(numover() as rate
from(
  select 市场类型,count(1as num
   from 工作
   group by 市场类型
) t;

复制

输出结果为:

市场类型   num      rate
  城镇   1201   0.7153
  乡村    478   0.2847

复制

该方法最简单的地方就是先写出子查询的内容,

select 市场类型,count(1as num
from 工作
group by 市场类型

复制

输出结果为:

市场类型  num
城镇    1201
乡村    478

复制

所以窗口函数中

sum(num) over() as rate

复制

表示对子查询的数进行求和计算。

(完)

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

评论