Access操作与SQL语句:重复数据处理

在EXCEL中处理重复数据有如下几种方法:

  • 函数
  • 条件格式标识
  • 高级筛选
  • 数据透视表

那么,在Access中,处理重复数据的方法包含重复项查询、不重复项查询以及数据去重查询,同样可以通过菜单操作、SQL语句两种方式完成。

重复项查询

1. 菜单操作法

在新建简单查询时,对话框中就有一项“查找重复项查询向导”功能,那么,就可以使用这个功能来查找数据重复项。
在这里插入图片描述
以“订购明细表”中重复的用户ID为例,具体查询操作如下:

  1. 单击【创建】选项卡,在【查询】组中单击【查询向导】按钮;
  2. 在弹出的对话框中,选择【查找重复项查询向导】,单击确定按钮;
  3. 在弹出的【查找重复项查询向导】第一个对话框中,选择【表】视图,比您在列表框中选择“订购明细”表作为查询对象,单击【下一步】按钮;
    在这里插入图片描述
  4. 在【查找重复项查询向导】第二个对话框【可用字段】列表框中,选择“用户ID”作为要进行查找重复项查询的字段,单击【完成】按钮;
  5. 查询结果如下所示,包含重复订购的用户ID,每个重复订购用户所重复订购的次数。
    在这里插入图片描述

2. SQL查询法

单击右下角的SQL按钮,简化后的语句如下:

SELECT First(用户ID),Count(用户ID) AS NumberOfDups
FROM 订购明细
GROUP BY 用户ID
HAVING Count(用户ID) > 1;

说明:

  1. First,是第一条记录的意思。有第一就有最后,其函数是Last。如果有用户重复订购,那么我们也可不适用Fisrt函数,直接使用字段表示即可,“用户ID”取哪个值都是一样的;
  2. GROUP BY子句就是实现对数据按指定的分组字段进行分组,本例中按用户进行分组,这与数据透视表分组统计的道理是一致的;
  3. HAVING子句在SELECT语句中与GROUP BY子句联合使用,用于表示GROUP BY子句输出结果的条件,其作用相当于WHERE子句之于SELECT语句。即WHERE子句设定被选择字段的条件,而HAVING子句设置GROUP BY子句形成的分组条件。
    另外它们都需要使用关系比较运算符:=、<、>、<=、>=、或<>。
    在本例中,“HAVING Count(用户ID)>1”的意思就是对用户ID出现2次及以上的数据进行分组。

不重复项查询

既然重复项是用户订购次数大于或等于2次的结果,那么不重复项不就是用户订购次数等于1的结果么?也就是说,我们只需在刚才查找重复项的SQL语句中,把HAVING Count(用户d)>1”更改为“HAVING Count(用户D)=1”即可

SELECT First(用户ID),Count(用户ID) AS NumberOfDups
FROM 订购明细
GROUP BY 用户ID
HAVING Count(用户ID) = 1;

数据去重查询

1. GROUP BY子句

刚才对重复项和不重复项的查找都是在HAVING子句设置GROUP BY子句形成的分组条件进行的,如果要去重,就不需要设置条件,显示出所有唯一的“用户ID”,直接用GROUP BY“用户ID”字段即可。SQL语句如下:

SELECT 用户ID
FROM 订购明细
GROUP BY 用户ID;

结果如下所示:
在这里插入图片描述

2. DISTINCT关键字

在Access数据库中,还可以使用DISTINCT关键字,它的作用是忽略所选字段中包含重复数据的记录,简单来说,就是数据去重。
如刚才的案例中,找出所有有购买行为的“用户ID”,但只保留其中一条,SQL语句如下:

SELECT DISTINCT 用户ID
FROM 订购明细;

结果如下所示:
在这里插入图片描述
需要注意的是:如果SELECT子句中包含多个字段,则对于结果中包含的特定记录,其所有字段的值组合必须是唯一的。

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