POSTGRESQL仅选择至少包含一个重复电话号码的重复帐户

时间:2018-05-24 17:14:45

标签: sql database postgresql

我想获取此示例数据(POSTGRESQL):

uuid       email       phone_number        
    1   a@gmail.com        111
    2   a@gmail.com        111
    3   a@gmail.com        112
    4   b@gmail.com        222
    5   b@gmail.com        222
    6   c@gmail.com        333
    7   d@gmail.com        444
    8   d@gmail.com        445
    9   d@gmail.com        446

消除所有:

  1. 非重复的电子邮件条目(在示例中为uuid = 6)
  2. 包含重复电子邮件但所有电话号码不同的行 (在示例中,uuid = 7,8,9)
  3. 并且保持:

    1. 其中一行包含重复的电子邮件条目且所有电话号码相等(在示例中,uuid = 4,5)
    2. 其中一行有重复的电子邮件条目且至少有两个电话号码相等(在示例中,uuid = 1,2,3)
    3. 结果数据为

            email       phone_number        
         a@gmail.com        111
         b@gmail.com        222
      

2 个答案:

答案 0 :(得分:1)

group by子句与having

一起使用
select email, phone_number 
from table t
group by email, phone_number  
having count(*) > 1;

答案 1 :(得分:0)

根据您的描述,您想要:

select email, max(phone_number)
from t
group by email
having count(*) > count(distinct phone_number) and
       count(*) > 1;