access重复数据累计_ACCESS数据库-sql语句查找重复记录、唯一记录和分组统计方法...

本文介绍了如何在Access数据库中利用SQL语句查找重复记录、唯一记录以及进行分组统计。通过不同的查询组合,可以获取同名人员、同名并同学号人员、同名但不同学号人员,同时展示了如何统计出现次数和查询唯一值。此外,还展示了如何按班级进行分组,查询每个班的总人数、总成绩和平均分,并且提供了在查询中添加条件来进一步细化结果的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本例测试环境是EXCEL中用VBA连接ACCESS数据库

有如下一张表,要分别查找出所有同名的人、所有同名并且学号也一样的人以及所有同名但不同学号的人。

查询所有同名人员

select * from [18年考试成绩] where [姓名] in (SELECT [姓名] FROM [18年考试成绩] group by [姓名] having count(姓名)>1)

查询结果:

查找所有姓名和学号两个字段都重复的人

select * from [18年考试成绩] where [姓名] in (SELECT [姓名] FROM [18年考试成绩] group by [姓名] having count(姓名)>1) and [学号] in (SELECT [学号] FROM [18年考试成绩] group by [学号] having count(学号)>1)

查询结果:

查找所有姓名重复但学号不重复的人

select * from [18年考试成绩] where [姓名] in (SELECT [姓名] FROM [18年考试成绩] group by [姓名] having count(姓名)>1) and [学号] not in (SELECT [学号] FROM [18年考试成绩] group by [学号] having count(学号)>1)

注意:要把SELECT查询子句配合in或not in 操作符使用,SELECT查询子句只能有一列内容。

查询结果:

其中子句 “SELECT [姓名] FROM [18年考试成绩] group by [姓名] having count(姓名)>1”是显示所有重复的姓名,如果如下:

如果要知道重复出现次数,则可以这样写:

SELECT [姓名],count(姓名) as 出现次数 FROM [18年考试成绩] group by [姓名] having count(姓名)>1

结果如下:

查找唯一记录

group by [姓名],意思是按姓名分组,having count(姓名)>1 是分组条件,意思是姓名次数出现2次以上的重复内容以姓名进行分组,前面的count(姓名)是对分组以后的姓名统计出现次数。在后面要使用函数条件时应该使用having,而不是使用where

查找唯一值,比如本例的班级中,只有一个“四班”,要把这个四班的所有字段显示出来可以这样:

select * from [18年考试成绩] where 班级 not in (SELECT 班级 FROM [18年考试成绩] group by 班级 having count(班级)>1)

结果:

如果使用“SELECT DISTINCT 班级 FROM [18年考试成绩]”语句查询唯一值,结果将会如下:

DISTINCT 会显示不重复的值,如果有重复的,只显示第一个,所以如果需要显示仅出现一次的值并不适合使用SELECT DISTINCT语句

分组查询语句:

比如要班级为单位,查询每个班的总人数,科目总分,科目平均分等

SELECT [班级],count(姓名) as 班级人数,sum(语文) as 语文总成绩,sum(数学) as 数学总成绩,ROUND(avg(语文),1) as 语文平均分,ROUND(avg(数学),1) as 数学平均分 FROM [18年考试成绩] group by [班级]

查询结果如下:

注意:如果使用函数的字段,不使用AS指定别名,将会自动生成一个字段名,第一列名字Expr1000,第二列名为Expr1001,第三列名为Expr1002,以此类推

如:

SELECT [班级],count(姓名),sum(语文),sum(数学),ROUND(avg(语文),1) ,ROUND(avg(数学),1) FROM [18年考试成绩] group by [班级]

查询结果如下:

如果不指定别名,你将无法清楚在查询结果中知道每一列是干什么的。

如果需要再细分,查询每个班女生总人数和科目平均分,只需要再加一个where条件就可以了

SELECT [班级],count(姓名) as 班级女性人数,ROUND(avg(语文),1) as 语文平均分,ROUND(avg(数学),1) as 数学平均分 FROM [18年考试成绩] where 性别='女' group by [班级]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值