数据库查询时过滤重复数据
来源:互联网 发布:淘宝运费险什么时候退 编辑:程序博客网 时间:2024/05/17 06:45
所使用数据库:oracle 10g
查询语句:
select * from (select id,course,name,class,result from student_result where course = '数学' order by result desc, class ) where rownum <= 10
查询结果如下表所示:
说明:比如这是一个学校在校所有学生的成绩表。现在要查询整个学校中,数学考的最高的10个人进行奖励。比如张小朋,留三次级,因此,再查询时,因为他是同一个人,只能拿出最新的成绩来进行抽取。
考虑方法:
1. 使用 DISTINCT 关键词做查询。
查询语句:
select * from (select distinct(name) from student_result where course = '数学' order by result desc,class) where rownum<=10
此时,在只查询一个安段时,可以过滤,重复内容只显示一次。但是我们还需要其它字段。而如下:
select * from (select id,course,distinct(name),class,result from student_result where course = '数学' order by result desc, class ) where rownum <= 10
此时,数据库会报错,提示: missing expression。因此考虑,DISTINCT关键词之前不能再有查询字段名称。尝试去掉之前内容理次进行查询,语句如下:
select * from (select distinct(name),class,result from student_result where course = '数学' order by result desc, class ) where rownum <= 10
或者
select * from (select distinct(id),course,distinct(name),class,result from student_result where course = '数学' order by result desc, class ) where rownum <= 10
使用这种查询果,有返回数据了,但是重复数据依然出现,分析原因可能是此时,查询语句将name,class,result三或多个字段并在一起进行比较,因为成绩和班级并不相同,因为重复内容依然显示。
因此,此种方法行不通。考虑后采用第二种方法。
2. 使用复合查询的方法。
思路,采用两次查询,然后采用两次结果对比的方法,过滤掉重复的数据,得到想要查询的结果。
SQL语句如下:
SELECT * from (SELECT id,course,Sname,class,result FROM student_result a WHERE a.rowid = SELECT MAX(b.ROWID) FROM result b WHERE b.id = a.id AND course = '数学' ORDER BY result desc, class ) WHERE rownum <= 10
此时,查询结果正确可用。
如果重复时,需要得到最早的成绩,则将MAX函数改成MIN函数即可。
SQL如下:
SELECT * from (SELECT id,course,Sname,class,result FROM student_result a WHERE a.rowid = SELECT MIN(b.ROWID) FROM result b WHERE b.id = a.id AND course = '数学' ORDER BY result desc, class ) WHERE rownum <= 10
将此次问题总结与此,录入过程难免手误,如有老师,朋友,游客,访客发现,还请不吝赐教!非常感谢。
- 数据库查询时过滤重复数据
- MySQL 查询过滤重复数据
- 查询数据库重复数据
- Sql查询语句过滤重复的数据
- 连表查询,distinct过滤重复数据
- Mysql数据库查询重复数据
- 查询数据库中的重复数据
- 查询数据库表重复数据
- 查询时过滤特殊重复行
- 过滤IBatis方法查询出来的重复数据
- Oracle extract 函数及过滤查询到的重复数据
- mysql查询过滤重复数据并随机取出记录
- 数据库查询 去掉 某列重复数据
- Sql查询与删除数据库重复数据
- ibatis 过滤重复数据
- 过滤重复数据
- 过滤数组重复数据
- 添加数据 过滤重复
- [转] 软件工程师的技能-水平-层次
- 创建nickname 整理版
- PowerDesign 相关数据库使用
- 分享:一道面试题
- Oracle - OCP复习 - PL/SQL(1-9) - SQLPLUS用法
- 数据库查询时过滤重复数据
- Visual Studio 2010- IntelliTrace(智能跟踪)[优化c盘]
- jQuery Ajax 全解析
- ajax 实现3级联动
- Unicode字符
- 困扰..
- OCP复习 - PL/SQL(1-9) - 建表
- 解决IE6,IE7 CSS效果不一致的问题
- HDU 2817(等差和等比数列问题)