温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

sql怎么进行数据去重

发布时间:2026-10-27 21:09:13 来源:亿速云 阅读:97 作者:小樊 栏目:数据库

在 SQL 中,“数据去重”通常分为 查询结果去重 和 表数据去重(删除重复数据) 两种场景。下面按常见用法说明(以 MySQL 为例,其他数据库类似)。


一、查询结果去重(不改表数据)

1️⃣ DISTINCT

对查询结果整体去重:

SELECT DISTINCT col1, col2
FROM table_name;

✅ 多列时,是对 整行组合 去重

2️⃣ GROUP BY

常用于聚合去重:

SELECT col1, MAX(col2)
FROM table_name
GROUP BY col1;

二、删除表中的重复数据

示例表

id | name | age
1  | Tom  | 20
2  | Tom  | 20
3  | Lucy | 22

✅ 方法 1:保留最小 id(推荐)

DELETE FROM user
WHERE id NOT IN (
    SELECT min_id FROM (
        SELECT MIN(id) AS min_id
        FROM user
        GROUP BY name, age
    ) t
);

⚠️ MySQL 不允许直接子查询删同一张表,需包一层 t


✅ 方法 2:使用窗口函数(MySQL 8+ / PostgreSQL)

DELETE FROM user
WHERE id IN (
    SELECT id FROM (
        SELECT id,
               ROW_NUMBER() OVER (
                   PARTITION BY name, age
                   ORDER BY id
               ) AS rn
        FROM user
    ) t
    WHERE rn > 1
);

✅ 按 name + age 去重,保留第一行


✅ 方法 3:创建新表(最安全)

CREATE TABLE user_new AS
SELECT * FROM user GROUP BY name, age;

DROP TABLE user;
RENAME TABLE user_new TO user;

三、常见去重维度

场景 方式
单列去重 DISTINCT
多列去重 GROUP BY
保留一条 ROW_NUMBER
全表清洗 新建表

四、不同数据库差异

数据库 去重方式
MySQL DISTINCT / GROUP BY
PostgreSQL DISTINCT / ROW_NUMBER
Oracle ROWID
SQL Server ROW_NUMBER

如果你有 具体表结构或数据库类型,我可以给你更精确的 SQL。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手