在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最小的一条记录,保留住了完整的记录信息,达到了期待的结果。
这个例子只考虑到了一条记录只包含两个字段的情况,多个字段是否依然适用,今天来不及实验了,请各位批评指正!如能回复,感激不尽!