前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Sql 实现数据透视表功能

Sql 实现数据透视表功能

作者头像
张俊红
发布2019-05-30 21:39:01
3.4K0
发布2019-05-30 21:39:01
举报
文章被收录于专栏:张俊红张俊红

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

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

代码语言:javascript
复制
orderid   price   date       area
S001      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 语句如下:

代码语言:javascript
复制
select
    ,date
    ,count(orderid)
from
    t
group by date

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

代码语言:javascript
复制
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
    t
group by date

最后结果如下:

代码语言:javascript
复制
         A区  B区  C区
2019/1/1  1   1    1
2019/1/2  1   1    0
2019/1/3  1   1    1

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

代码语言:javascript
复制
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
    t
group by date

最后结果如下:

代码语言:javascript
复制
          A区  B区  C区
2019/1/1  10   20   30
2019/1/2  40   10   20
2019/1/3  30   0    40

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 俊红的数据分析之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档