Access操作与SQL语句:重复数据处理
程序员文章站
2022-04-13 23:17:49
...
在EXCEL中处理重复数据有如下几种方法:
- 函数
- 条件格式标识
- 高级筛选
- 数据透视表
那么,在Access中,处理重复数据的方法包含重复项查询、不重复项查询以及数据去重查询,同样可以通过菜单操作、SQL语句两种方式完成。
重复项查询
1. 菜单操作法
在新建简单查询时,对话框中就有一项“查找重复项查询向导”功能,那么,就可以使用这个功能来查找数据重复项。
以“订购明细表”中重复的用户ID为例,具体查询操作如下:
- 单击【创建】选项卡,在【查询】组中单击【查询向导】按钮;
- 在弹出的对话框中,选择【查找重复项查询向导】,单击确定按钮;
- 在弹出的【查找重复项查询向导】第一个对话框中,选择【表】视图,比您在列表框中选择“订购明细”表作为查询对象,单击【下一步】按钮;
- 在【查找重复项查询向导】第二个对话框【可用字段】列表框中,选择“用户ID”作为要进行查找重复项查询的字段,单击【完成】按钮;
- 查询结果如下所示,包含重复订购的用户ID,每个重复订购用户所重复订购的次数。
2. SQL查询法
单击右下角的SQL按钮,简化后的语句如下:
SELECT First(用户ID),Count(用户ID) AS NumberOfDups
FROM 订购明细
GROUP BY 用户ID
HAVING Count(用户ID) > 1;
说明:
- First,是第一条记录的意思。有第一就有最后,其函数是Last。如果有用户重复订购,那么我们也可不适用Fisrt函数,直接使用字段表示即可,“用户ID”取哪个值都是一样的;
- GROUP BY子句就是实现对数据按指定的分组字段进行分组,本例中按用户进行分组,这与数据透视表分组统计的道理是一致的;
- 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子句中包含多个字段,则对于结果中包含的特定记录,其所有字段的值组合必须是唯一的。