SQL实现数据透视表功能

SQL数据分析1.jpeg

讲过很多次,数据分组和数据透视表很像,Sql 中的数据分组大家应该都很熟悉了,用的就是 group by。数据透视表是作为一个数据分析师最基本,也是使用频率最高的一个功能了,我们可以把明细数据从数据库导出来,然后在 Excel 里面做透视表,也可以直接在数据库里面做透视表,然后将透视结果进行导出。这篇我们来看看 Sql 中的数据透视表怎么做,这里以 Mysql 数据库为例。

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

透视表.png

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

orderidpricedatearea
S001102019/1/1A区
S002202019/1/1B区
S003302019/1/1C区
S004402019/1/2A区
S005102019/1/2B区
S006202019/1/2C区
S007302019/1/3A区
S008402019/1/3C区

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

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
    t
group 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
    t
group by date

最后结果如下:

A区B区C区
2019/1/1111
2019/1/2110
2019/1/3111

当然了,聚合函数不止可以用 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
    t
group by date

最后结果如下:

A区B区C区
2019/1/1102030
2019/1/2401020
2019/1/330040

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

作者丨张俊红
来源丨俊红的数据分析之路

该作者其他文章推荐

SQL的执行顺序是怎样的?

![SQL数据分析.jpg][1] 学过 Sql,或了解过 Sql 的人,应该都会写下面这行代码: select * from t 上面代码表示查询 t 表中的所有信息,是 Sql 查询....


SQL实现数据透视表功能

![SQL数据分析1.jpeg][1] 讲过很多次,数据分组和数据透视表很像,Sql 中的数据分组大家应该都很熟悉了,用的就是 group by。数据透视表是作为一个数据分析师最基本,也是使用频....

本文来自投稿,不代表本站立场,如若转载,请注明出处:http://www.zuopm.com/data/202.html
-- 展开阅读全文 --
SQL的执行顺序是怎样的?
« 上一篇 02-25
数据分析前要做哪些准备?超详细的数据分析前置工作指南
下一篇 » 02-26

发表评论

作者信息

热门文章

标签TAG

热评文章