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

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

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

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

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

【问题讨论】:

    标签: sql string postgresql count window-functions


    【解决方案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 大师!谢谢。计数列计算所有重复的号码,不仅是名称不同的号码,而且电话号码列表解决了我的情况。再次感谢!
    猜你喜欢
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2012-06-17
    • 2013-01-01
    相关资源
    最近更新 更多