Postgres名称重复的电话号码重复

问题描述

使用一个由名字,姓氏和电话(所有文本字段)组成的简单表,如何查找一个以上的人使用了多少个唯一的电话号码?

我知道如何查找有多少个重复的电话号码,但是我只想统计一下当名字与电话号码不同的电话号码是重复的电话号码时。

我怀疑这可能类似于以下内容,其中显示了多少个完全重复的副本:

SELECT firstname,lastname,phone
FROM people
GROUP BY lastname,firstname,phone
HAVING count(*) >1

解决方法

使用两种聚合级别:

select count(*)
from (
    select 1
    from mytable
    group by phone
    having count(*) > 1
) t

这假设相同的电话号码不会对同一个人造成两次影响。

另一个选择是窗口函数(也可以正确处理上述情况):

select count(*) filter(where rn = 2)
from (
    select dense_rank() over(partition by phone order by firstname,lastname) rn
    from mytable
) t