数据库查询时过滤重复数据

来源:互联网 发布:淘宝运费险什么时候退 编辑:程序博客网 时间: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

 

查询结果如下表所示:

 

idcoursenameclassresult0051598数学张小朋0503980051590数学李逵0614980051598数学张小朋0603970051598数学张小朋0703960051420数学王伟0427960051259数学张大志0507950051259数学赵紫阳0524950051259数学林办邑0705940051259数学房中安0601940051259数学代烃中051194

 

说明:比如这是一个学校在校所有学生的成绩表。现在要查询整个学校中,数学考的最高的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

 

 

将此次问题总结与此,录入过程难免手误,如有老师,朋友,游客,访客发现,还请不吝赐教!非常感谢。

原创粉丝点击