oracle – 如何查找具有相同(某些x值)值的列重复多次?需要返回

有一个名为联系人的表,其中包含列id,名称,地址,ph_no等.

我需要查找具有相同名称的行,如果行数大于1,则显示这些行.

例如:
表:联系人

id--------name--------address---------ph_no--------
111       apple       U.K             99*******
112       banana      U.S             99*******
123       grape       INDIA           99*******
143       orange      S.AFRICA        99*******
152       grape       KENYA           99*******

对于上面的表,我需要获得具有相同列名数据的行,如下所示:

id--------name--------address---------ph_no--------
123       grape       INDIA           99*******
152       grape       KENYA           99*******

我需要根据我给出的名称来获取行,如下面的示例语法:

select * from contacts where name='grape' and it's count(*) >1 return those rows.

如何实现上述问题的解决方案.

正如@ vc74所暗示的那样,分析函数在这里工作得更好;特别是如果您的数据有任何数量.

select id,name,address,ph_no ...
  from ( select c.*,count(name) over ( partition by name ) as name_ct
           from contacts c )
 where name_ct > 1
       ;

编辑

限制特定名称表联系人应该在名称上有一个索引,查询将如下所示:

select id,count(name) over ( partition by name ) as name_ct
           from contacts c
          where name = 'grape' )
 where name_ct > 1
       ;

相关文章

发表回复

您的电子邮箱地址不会被公开。