需求一:
oracle数据库中,表table中有字段A、B、C、D、E,对table做查询,要求查询结果中A、B两字段值相同都相同的多条记录只显示其中一条:
如下表:
A |
B |
C |
D |
E |
李明 |
2013-5-23 |
X |
Y |
Z |
李明 |
2013-5-23 |
M |
N |
K |
李华 |
2013-5-23 |
X |
Y |
Z |
张三 |
2013-5-23 |
X |
Y |
Z |
按照要求显示为:
A |
B |
C |
D |
E |
李明 |
2013-5-23 |
X |
Y |
Z |
李华 |
2013-5-23 |
X |
Y |
Z |
张三 |
2013-5-23 |
X |
Y |
Z |
用group by 即可实现,
select A, B from table group by A,B;
如此得到的结果如下图:
A |
B |
李明 |
2013-5-23 |
李华 |
2013-5-23 |
张三 |
2013-5-23 |
group by 后面要出现select中所有不是聚合函数的字段,那么我们同时要在查询结果中显示字段C、D、E的话,需要对查询语句稍作修改,将字段C、D、E转化为聚合函数:
select A,B,min(C),min(D),min(E) from table group by A,B;
(直接使用select A,B,C,D,E from table group by A,B; 是会提示语法错误)
需求二:
查询并显示表table中字段A有重复的记录。
如下表:
A |
B |
C |
D |
E |
李明 |
2013-5-23 |
X |
Y |
Z |
李明 |
2013-5-23 |
M |
N |
K |
李华 |
2013-5-23 |
X |
Y |
Z |
张三 |
2013-5-23 |
X |
Y |
Z |
显示为:
A |
B |
C |
D |
E |
李明 |
2013-5-23 |
X |
Y |
Z |
李明 |
2013-5-23 |
M |
N |
K |
解决方法:
select * from table where A in(select A from table group by A having count(A)>1)