​​mysql如何实现透视表功能!

  • A+
所属分类:SQL技巧

​​mysql如何实现透视表功能!

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

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

​​mysql如何实现透视表功能!

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

orderidprice date area

S00110 2019/1/1 A区

S00220 2019/1/1 B区

S00330 2019/1/1 C区

S00440 2019/1/2 A区

S00510 2019/1/2 B区

S00620 2019/1/2 C区

S00730 2019/1/3 A区

S00840 2019/1/3 C区

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

​​mysql如何实现透视表功能!

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

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

select

,date

,count(orderid)

from

t

groupbydate

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

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

groupbydate

最后结果如下:

A区 B区 C区

2019/1/1 1 1 1

2019/1/2 1 1 0

2019/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

t

groupbydate

最后结果如下:

A区 B区 C区

2019/1/1 10 20 30

2019/1/2 40 10 20

2019/1/3 30 0 40

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

如果大家有其他的方法,或者想要知道哪方面的办公技巧,下方评论哦~

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

​​mysql如何实现透视表功能!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需99元,即可下载本站文章涉及的文件和软件。

  • 我的微信
  • weinxin
  • 我的知识星球
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: