清空表数据sql_如何用SQL做数据透视表?

bfd61b7720e9559d84aaff314ef891eb.png

讲过很多次,数据分组和数据透视表很像,Sql 中的数据分组大家应该都很熟悉了,用的就是 group by

数据透视表是作为一个数据分析师最基本,也是使用频率最高的一个功能了,我们可以把明细数据从数据库导出来,然后在 Excel 里面做透视表,也可以直接在数据库里面做透视表,然后将透视结果进行导出。这篇我们来看看 Sql 中的数据透视表怎么做,这里以 Mysql 数据库为例。

要讲怎么在 Sql 中做透视表,我们还是先看看什么是透视表,其实透视表的核心就是按照行列同时分组,然后对分组后的值进行某种汇总运算。

fa8eb95cc44226b6be47d60185259f00.png

现在有这么一张表 t,存储的字段如下:

orderid   price   date       areaS001      10      2019/1/1   A区S002      20      2019/1/1   B区S003      30      2019/1/1   C区S004      40      2019/1/2   A区S005      10      2019/1/2   B区S006      20      2019/1/2   C区S007      30      2019/1/3   A区S008      40      2019/1/3   C区

现在我们想看一下每个区域每天的订单量,就是下表这个样子,我们该怎么做呢?

A区B区C区2019/1/1

2019/1/2

2019/1/3

如果要是在 Excel 中做的话就很简单,直接做一个透视表就ok了,把 date 拖到行那个框,将 area 拖到列那个框,将 orderid 拖到值那个框,然后对 orderid 进行计数运算即可。

在 Sql 中,如果我们只是看每一天的订单量的话是不是只需要直接按照成交日期进行 group by 就行,Sql 语句如下:

select    ,date    ,count(orderid)from    tgroup by date

现在我们想看一下每个区域每天的一个成交情况,那是不是在上面代码的基础上再加一个用来判断区域的一个条件,就可以得出每个区域的情况了。

select    ,date    ,count(case when area = "A区" then orderid end) as "A区"    ,count(case when area = "B区" then orderid end) as "B区"    ,count(case when area = "C区" then orderid end) as "C区"from    tgroup by date

最后结果如下:

         A区  B区  C区2019/1/1  1   1    12019/1/2  1   1    02019/1/3  1   1    1

当然了,聚合函数不止可以用 count,还可以用别的聚合函数,比如说,我们想看一下每个区域每一天的营业额,就是所有订单的 price 相加。Sql 代码如下:

select    ,date    ,sum(case when area = "A区" then price else 0 end) as "A区"    ,sum(case when area = "B区" then price else 0  end) as "B区"    ,sum(case when area = "C区" then price else 0  end) as "C区"from    tgroup by date

最后结果如下:

          A区  B区  C区2019/1/1  10   20   302019/1/2  40   10   202019/1/3  30   0    40

以上就是关于利用 Sql 做数据透视表的一个基本讲解,用 case when 这种方法虽然可以实现数据透视表的功能,但是无论从代码量还是运行速度方面都不是特别理想,如果大家有别的更好的方法,欢迎评论区一起交流。

声明

来源:俊红的数据分析之路,人工智能报推荐阅读,不代表人工智能产业链联盟立场,转载请注明,如涉及作品版权问题,请联系我们删除或做相关处理!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值