postgresql如何查询重复计数及去重查询例子解析

在这里插入图片描述

代码示例:

在PostgreSQL中查询重复计数及去重查询可以通过多种方法实现。以下是一些详细的例子:

  1. 查询重复计数
    使用聚合函数count()配合over()窗口函数可以查询每个元素的重复计数:

    SELECT id, name, email,
           count(*) OVER (PARTITION BY email) AS cnt
    FROM people;
    

    这将为people表中的每行显示email字段的重复计数。

  2. 基于单个字段的重复记录查询
    可以通过分组统计并且返回行数大于1的分组来查询重复记录:

    SELECT at, COUNT(at) 
    FROM table2 
    GROUP BY at 
    HAVING COUNT(at) > 1;
    

    如果想要查看完整的重复数据,可以使用子查询或者连接查询:

    SELECT *
    FROM table2
    WHERE at IN (SELECT at FROM table2 GROUP BY at HAVING COUNT(at) > 1)
    ORDER BY at;
    

    或者使用自连接查询和DISTINCT操作符:

    SELECT DISTINCT p.*
    FROM table2 p
    JOIN table2 d ON p.at = d.at
    WHERE p.id <> d.id
    ORDER BY p.at;
    
  3. 基于多个字段的重复记录查询
    如果想要找出nameemail两个字段都重复的数据,可以基于这两个字段进行分组统计:

    SELECT *
    FROM people
    WHERE (name, email) IN (
        SELECT name, email
        FROM people
        GROUP BY name, email
        HAVING COUNT(1) > 1)
    ORDER BY email;
    
  4. 使用DISTINCT ON进行去重查询
    DISTINCT ON是PostgreSQL的一个特殊用法,允许指定一个或多个列作为标准去除每个分组的重复行:

    SELECT DISTINCT ON (column_name) column_name, other_column
    FROM table_name
    ORDER BY column_name, other_column;
    

    这将为每个column_name值返回第一条记录,其他重复的记录将被去除。

  5. 使用窗口函数进行去重
    使用ROW_NUMBER()窗口函数可以对数据进行分组,并为每个分组内的数据分配一个唯一的数字编号:

    SELECT id, name, email,
           ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS row_num
    FROM people;
    

    然后可以基于这个编号去除重复记录。

  6. 删除重复记录
    如果要删除重复记录,只保留id最小的一条,可以使用以下查询:

    DELETE FROM people
    WHERE id NOT IN (SELECT MIN(id) FROM people GROUP BY email);
    

这些方法可以根据实际情况和需求进行选择和调整。

喜欢本文,请点赞、收藏和关注!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乔丹搞IT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值