Oracle数据库SQL查询重复记录的处理

时间:2022-03-15 23:52:38

需求一:

         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)