前面我们学习了Access数据库中的数据合并、数据计算、数据分组、重复数据处理四大常用的数据处理方式。
数据处理的目的就是将采集到的的数据,用适当的处理方法整理加工,形成适合数据分析要求的样式,也就是一维表,为数据分析做好准备工作。
我们日常工作中所做的数据分析,主要指通过对比与细分进行现状分析及原因分析,通过数据分组了解其数据构成,甚至通过不同时间维度的对比,查找数据变化的原因,最后通过制作相关图标等对现状进行呈现及描述。
接下来我们学习再Access数据库中进行数据分析的方法,主要包含:
- 简单统计
- 分组统计
- 交叉表统计
我们主要介绍SQL语句实现的方式。
一、简单统计
常用的统计函数如下所示:
我们以“订购明细表”为例,统计订单总数、订购金额总额、平均订单金额三个数据,SQL语句如下:
SELECT
Count(订单编号) AS 订单总数,
Sum(订购金额) AS 订购金额总额,
Avg(订购金额) AS 平均订单金额
FROM 订购明细;
结果如下所示:
二、分组统计
我们在学习重复数据处理时用过GROUP BY子句,实现对数据按指定的分组字段进行分组的功能。
现在,我们同样以“订购明细表”,统计各个产品的订单总数、订购金额总额、平均订单金额三个数据,SQL语句如下:
SELECT 产品,
Count(订单编号) AS 订单总数,
Sum(订购金额) AS 订购金额总额,
Avg(订购金额) AS 平均订单金额
FROM 订购明细
GROUP BY 产品;
结果如下所示:
我们还想了解用户订购时段的分布信息,而原有的“订购明细表”只有“订购日期”字段,需要取出时段信息,可采用FORMAT函数:
SELECT FORMAT(订购日期,"h") AS 时段,
Count(订单编号) AS 订单数,
FROM 订购明细
GROUP BY FORMAT(订购日期,"h");
结果如下所示:
还是以“订购明细表”为例,我们需要了解不同年龄段的用户订购分布情况,并且订购用户存在重复情况,需要去重。操作步骤如下:
- 先将“订购明细表”与“用户明细表”按关键字段“用户ID”进行关联查询,并且可同时进行去重处理;
- 采用PARTITION函数法对用户年龄分组;
- 把查询结果作为子查询嵌套在分组统计查询汇总。
SQL语句如下:
SELECT 年龄分组,Count(用户ID) AS 用户数
FROM
(SELECT DISTINCT A.用户ID,PARTITION(B.年龄,1,100,5) AS 年龄分组
FROM 订购明细 AS A, 用户明细 AS B
WHERE A.用户ID = B.用户ID)
GROUP BY 年龄分组;
结果如下所示:
这里需要说明的是:在Access数据库中进行数据去重处理时,需要使用嵌套查询,把数据去重结果作为子查询。
如果是需要了解各省份的订单数分布,无需先进行数据去重处理,那么就无需使用嵌套查询,SQL语句如下:
SELECT B.省份,Count(A.订单编号) AS 订单数
FROM 订购明细 AS A,用户明细 AS B
WHERE A.用户ID = B.用户ID
GROUP BY B.省份;
结果如下所示:
三、交叉表统计
1. 菜单操作法
交叉表统计需要借助“简单查询”功能来实现。我们以“用户明细表”为例,统计不同省份、性别的用户分布情况。操作步骤如下:
- 单击【创建】,单击【查询向导】按钮;
- 在弹出的【新建查询】对话框中,选择【交叉表查询向导】;
- 在弹出的【交叉表查询向导】第一个对话框中,选择【表】视图,并在列表框中选择“用户明细”表作为查询对象;
- 在弹出的第二个对话框【可用字段】中,选择“省份”作为行标题;
- 在弹出的第三个对话框字段列中,选择“性别”作为标题;
- 在弹出的第四个对话框中,选择“用户ID”作为每行和列交叉点的统计项,并在【函数】中,选择“Count”函数,并保持默认勾选的【是,包括各行小计】项;
- 在第五个对话框中,输入该查询的名称。
结果如下所示:
2. SQL语句法
单击右下方的SQL按钮,得到简化后的SQL语句:
TRANSFORM Count(用户ID) AS 用户ID之计数
SELECT 省份, Count(用户ID) AS 总计 用户ID
FROM 用户明细
GROUP BY 省份
PIVOT 性别;
我们发现,相比分组统计的SQL语句,在前后增加了TRANSFORM与PIVOT语句。
只要在分组统计SQL语句的基础上,
- 前后增加TRANSFORM与PIVOT语句;
- 在TRANSFORM后面增加每个行与列交叉点统计函数及字段;
- 在PIVOT后面增加要作为列标题的分组字段。