ORACLE,筛选单字段不重复的记录,保留其他字段.

  在ORACLE中,我们常常对数据进行排序和筛选,例如:成绩表中,将某一个人的所有科目成绩放到一起来看,那么我们会使用ORDER BY 语句。

例如表T1:

Name   Subject     Score

LI            Math          84

Zhang    Art              75

Li            Physics     93

Zhang    Math           97

Zhang   Physics     71

Li             Art              85

        

我们使用语句 SELECT *FROM T1 ORDER BY NAME 可以使得查询结果按姓名排列。 

使用语句SELECT * FROM T1 ORDER BY SUBJECT 可以使查询结果按科目排列。(结果省略请自行操作)


对于求一个人的总分,也很好办,我们可以使用GROUP BY 语句,将求和的结果直接按每个名字一条记录输出,例如:

SELECT SUM(SCORE) FROM T1 GROUP BY NAME 这样可以得到各名字对应的总分。


事实上,类似于SUM,MAX,MIN这样的函数被称为聚集函数,就是和GROUP搭配起来用的。


然而很多时候我们需要的是聚集运算前的原始信息,例如:

ID            TYPE

000132 A

000212 C

000213 B

000632 A

001283 B

这样的信息,我们希望按组分开,而又希望保留完整的条目(每个TYPE任意一条即可),笔者在网上看到的一个机智的做法是使用MIN函数

SELECT MIN(ID),TYPE FROM T1 GROUP BY TYPE

这样,就取出了每个TYPE中的ID最小的一条记录,保留住了完整的记录信息,达到了期待的结果。


这个例子只考虑到了一条记录只包含两个字段的情况,多个字段是否依然适用,今天来不及实验了,请各位批评指正!如能回复,感激不尽!

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页