PHP+Mysql实现类似excel的数据透视表功能
时间:2024年01月21日
/来源:网络
/编辑:佚名
Mysql中数据分组和数据透视表很像,MySql中的数据分组大家应该都很熟悉了,用的就是 group by。数据透视表是作为一个数据分析师最基本,也是使用频率最高的一个功能了,我们可以把明细数据从数据库导出来,然后在 Excel 里面做透视表,也可以直接在数据库里面做透视表,然后将透视结果进行导出。这篇我们来看看MySql中的数据透视表怎么做。
我们还是先看看什么是透视表,其实透视表的核心就是按照行列同时分组,然后对分组后的值进行某种汇总运算。
现在有这么一张表 t,存储的字段如下:
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区
现在我们想看一下每个区域每天的订单量,就是下表这个样子,我们该怎么做呢?
如果要是在 Excel 中做的话就很简单,直接做一个透视表就ok了,把 date 拖到行那个框,将 area 拖到列那个框,将 orderid 拖到值那个框,然后对 orderid 进行计数运算即可。
在Mysql中,如果我们只是看每一天的订单量的话是不是只需要直接按照成交日期进行 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/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
group by date
最后结果如下:
A区 B区 C区
2019/1/1 10 20 30
2019/1/2 40 10 20
2019/1/3 30 0 40
以上就是PHP+Mysql实现类似excel的数据透视表功能的全部内容!
我们还是先看看什么是透视表,其实透视表的核心就是按照行列同时分组,然后对分组后的值进行某种汇总运算。
现在有这么一张表 t,存储的字段如下:
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区
现在我们想看一下每个区域每天的订单量,就是下表这个样子,我们该怎么做呢?
如果要是在 Excel 中做的话就很简单,直接做一个透视表就ok了,把 date 拖到行那个框,将 area 拖到列那个框,将 orderid 拖到值那个框,然后对 orderid 进行计数运算即可。
在Mysql中,如果我们只是看每一天的订单量的话是不是只需要直接按照成交日期进行 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/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
group by date
最后结果如下:
A区 B区 C区
2019/1/1 10 20 30
2019/1/2 40 10 20
2019/1/3 30 0 40
以上就是PHP+Mysql实现类似excel的数据透视表功能的全部内容!
新闻资讯 更多
- 【建站知识】查询nginx日志状态码大于400的请求并打印整行04-03
- 【建站知识】Python中的logger和handler到底是个什么?04-03
- 【建站知识】python3拉勾网爬虫之(您操作太频繁,请稍后访问)04-03
- 【建站知识】xpath 获取meta里的keywords及description的方法04-03
- 【建站知识】python向上取整以50为界04-03
- 【建站知识】scrapy xpath遇见乱码解决04-03
- 【建站知识】scrapy爬取后中文乱码,解决word转为html 时cp1252编码问题04-03
- 【建站知识】scrapy采集—爬取中文乱码,gb2312转为utf-804-03