欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-13 23:17:49
...

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

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

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

重复项查询

1. 菜单操作法

在新建简单查询时,对话框中就有一项“查找重复项查询向导”功能,那么,就可以使用这个功能来查找数据重复项。
Access操作与SQL语句:重复数据处理
以“订购明细表”中重复的用户ID为例,具体查询操作如下:

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

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;

结果如下所示:
Access操作与SQL语句:重复数据处理

2. DISTINCT关键字

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

SELECT DISTINCT 用户ID
FROM 订购明细;

结果如下所示:
Access操作与SQL语句:重复数据处理
需要注意的是:如果SELECT子句中包含多个字段,则对于结果中包含的特定记录,其所有字段的值组合必须是唯一的。

相关标签: sql access