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重复名称不同的电话号码的主要内容,如果未能解决你的问题,请参考以下文章
我是flutter的新手,我想将用户详细信息名称,地址,手机号码,电子邮件等数据传递到另一个屏幕,你能告诉我怎么做吗[重复]
原子计数器 - redis vs postgres或其他? [关闭]