Access操作与SQL语句:数据分组

数据分析三大基本方法分别是:

  • 对比
  • 细分
  • 预测

现在我们学习一下细分的方法:数据分组。
进行数据分析时不仅要对总体的数量特征和数量关系记性分析,还要深入总体的内部进行分组分析。数据分组是一种重要的数据分析方法,这种方法根据数据分析对象的特征,按照一定的标志(指标),如业务、用户属性、时间等维度,把数据分析对象划分为不同的部分和类型来进行研究,以揭示其内在的联系和规律性。
常用的数据分组方式主要包括数值分组、日期/时间分组两种。

一、数值分组

1. IIF函数法

在Access中,IIF函数最多可进行13成嵌套,如果嵌套超过13层,运行时Access数据库将提示“表达式过于复杂”。
IIF函数语法如下:

IIF(表达式,表达式成立时返回的值,表达式不成立时返回的值)

以“用户明细”表为例。表中有个“年龄”字段,我们需要了解用户年龄结构,这是就需要对用户年龄进行分组。以IIF函数进行分组,编写的SQL语句如下:

SELECT 用户ID,年龄,
IIF(年龄 <= 20,"20岁及其以下",
IIF(年龄 <=30,"21-30岁",
IIF(年龄 <= 40,"31-40岁",
"40岁以上"))) AS 年龄分组
FROM 用户明细;

将编写好的SQL语句复制到新建的查询SQL视图窗口中,单击【运行】,得到如下结果:
在这里插入图片描述

2. CHOOSE函数

与Excel中的CHOOSE函数用法与功能一样。语法如下:

CHOOSE(参数,结果1,结果2,……,结果N)

说明:

  1. 参数可为数字或表达式,如果参数或表达式返回的值是1,则函数CHOOSE返回的结果1;如果参数或表达式返回的值为2,函数CHOOSE返回结果为2,以此类推……
  2. 参数或表达式返回的值必须为1~254的数字,如果小于1或者大于254,则Access数据库将返回错误值“#VALUE”。
  3. 如果参数为小数,则在使用前将被截尾取整,即相当于Excel中的INT函数效果。

仍然以“用户明细表”为例,对用户年龄进行分组,下面采用CHOOSE函数进行分组,编写的SQL语句如下:

SELECT 用户ID,年龄,
CHOOSE((年龄-1)/10+1,"10岁及其以下","11-20岁","21-30岁","31-40岁","40岁以上") AS 年龄分组
FROM 用户明细;

表达式为何为“(年龄-1)/10+1”?

  1. 假设年龄范围是1~10岁,那么“(年龄-1)/10”返回的值就落入[0,1]区间,而“(年龄-1)/10+1”返回的值就落入[1,2]区间;
  2. 根据CHOOSE函数语法介绍,“如果参数为小数,则在使用前将被截尾取整",那么参数最终返回值为1,也就对应第一个结果”10岁及其以下";
  3. 依次类推,就可把用户年龄划分为不同的范围,从而保证各个用户年龄都能落入正确的区间。

3. SWITCH函数

SWITCH函数语法如下:

SWITCH(条件1,结果1,条件2,结果2,……,条件N,结果N)

说明:

  1. 如果条件1为TRUE,SWITCH将返回结果1,如果条件2为TRUE,SWITCH将返回结果2,以此类推……
  2. 参数由成对的条件表达式和结果值组成,条件表达式按照从左到右的顺序求值,将返回与第一个求值结果为TRUE的表达式相对应的结果值;
  3. SWITCH函数在SQL语句中的条件表达式最多可以达到14个,如果多于14个表达式,将提示错误;
  4. 如果所有表达式的结果值都不为TRUE,SWITCH将返回NULL。

仍然以“用户明细表”为例,对用户年龄分组,采用SWITCH函数进行分组,SQL语句如下:

SELECT 用户ID,年龄,
SWITCH(年龄 <= 20,"20岁及以下",
      年龄 <= 30,"21-30岁",
      年龄 <= 40,"31-40岁",
      年龄 > 40,"40岁以上") AS 年龄分组
FROM 用户明细;

SWITCH函数分组与IIF函数分组效果一样,但其条件与结果写在一起,让人感觉分组更清晰。

4. PARTITION函数

PARTITION函数的语法如下:

PARTITION(数值参数,开始值,结束值,组距)

说明:

  1. 数值参数为要根据范围进行计算的整数;
  2. 开始值必须为整数,并且不能小于0;
  3. 结束值也必须为整数,该数值不能等于或小于开始值;
  4. 组距也必须为整数,指定在整个数值范围内(在开始值与结束值之间)的分区大小;
  5. PARTITION返回的内容为每组的“下限:上限”。
    仍然以“用户明细表”为例,对用户年龄分组,采用PARTITION函数进行分组,SQL语句如下:
SELECT 用户ID,年龄,
PARTITION(年龄,1,100,20) AS 年龄分组
FROM 用户明细;

在这里插入图片描述

5. 四个分组函数的比较

如果要进行数值等距分组,可以考虑使用PARTITION或CHOOSE函数;如果要进行数值不等距分组,可考虑使用SWITCH或IIF函数。
在这里插入图片描述

二、日期/时间分组

在Access数据库中,除了可以采用YEAR、MONTH、DAY等常用日期函数(如之前的所示)来进行日期分组外,还可以采用FORMAT函数进行日期/时间分组。FORMAT函数可对文本、数值、日期/时间等类型数据按指定要求进行格式化,我们主要介绍FORMAT函数的日期/时间格式化功能。
FORMAT函数的语法如下:

FORMAT(日期/时间,日期/时间格式参数)

FORMAT函数中日期/时间相关的格式参数说明如下图所示:
在这里插入图片描述
我们以“订购明细”表为例,对用户订购日期依次按年、季、月、日、星期、小时、分、秒等8个日期/时间单位进行格式化分组。下面采用FORMAT函数进行分组,SQL语句如下:

SELECT 订单编号,订购日期,
FORMAT(订购日期,"yyyy") AS,
FORMAT(订购日期,"q") AS 季度,
FORMAT(订购日期,"m") AS 月份,
FORMAT(订购日期,"d") AS,
FORMAT(订购日期,"dddd") AS 星期,
FORMAT(订购日期,"h") AS 小时,
FORMAT(订购日期,"n") AS,
FORMAT(订购日期,"s") ASFROM 订购明细;

将编写好的SQL语句直接复制至一个新建的查询SQL视图窗口中,单击【运行】按钮,得到的结果如下图:
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章