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

Posted

技术标签:

【中文标题】Postgres重复名称不同的电话号码【英文标题】:Postgres duplicate phone numbers where name is different 【发布时间】:2020-08-20 00:15:15 【问题描述】:

使用一个由名字、姓氏和电话(所有文本字段)组成的简单表格,我如何才能找到多个人使用的唯一电话号码?

我知道如何找到有多少个重复的电话号码,但我只想计算当电话号码重复且名字 + 姓氏 + 电话不同时有多少个。

我怀疑它会类似于以下内容,显示有多少完整的重复:

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

【问题讨论】:

【参考方案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

【讨论】:

这给了我所有重复的计数,但我只希望在电话号码重复但名字 + 姓氏 + 电话不同时重复。 @Ryan:我想我在回答中提到了这一点。您应该尝试第二个查询。 我认为你是对的。谢谢!结果看起来符合我的预期,但我需要以某种方式扩展以验证。如何打印出该计数中的电话号码? @Ryan:类似:select phone, count(*) cnt from (select phone, dense_rank() over(partition by phone order by firstname, lastname) rn from mytable) t group by phone having max(rn) > 1 您是 SQL 大师!谢谢。计数列计算所有重复的号码,不仅是名称不同的号码,而且电话号码列表解决了我的情况。再次感谢!

以上是关于Postgres重复名称不同的电话号码的主要内容,如果未能解决你的问题,请参考以下文章

简单的更新集 postgres 存储过程

iphone sim号码[重复]

我是flutter的新手,我想将用户详细信息名称,地址,手机号码,电子邮件等数据传递到另一个屏幕,你能告诉我怎么做吗[重复]

原子计数器 - redis vs postgres或其他? [关闭]

MySQL:带有 ORDER BY COUNT 的 GROUP_CONCAT?

Python爬虫电话号码批量数据爬取