温馨提示×

温馨提示×

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

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

SQL怎么过滤重复数据

发布时间:2026-10-10 17:51:07 来源:亿速云 阅读:98 作者:小樊 栏目:编程语言

在 SQL 中,“过滤重复数据”通常有以下几种常见场景和写法,按使用频率从高到低说明:


一、查询时去掉重复行(最常用)

1️⃣ DISTINCT

用于查询结果中去重(整行相同才去重)

SELECT DISTINCT column1, column2
FROM table_name;

✅ 示例:

SELECT DISTINCT name
FROM user;

二、按某列去重,保留一条(常用)

2️⃣ GROUP BY

按某些字段分组,通常配合聚合函数

SELECT user_id, MAX(create_time)
FROM orders
GROUP BY user_id;

✅ 保留每个用户最新的一条订单


三、删除表中的重复数据(重点)

3️⃣ 删除完全重复的行

DELETE FROM table_name
WHERE rowid NOT IN (
  SELECT MIN(rowid)
  FROM table_name
  GROUP BY col1, col2, col3
);

⚠️ rowid 是 Oracle / SQLite 用法
MySQL 可用主键或自增 ID 代替


4️⃣ MySQL 删除重复数据(推荐写法)

DELETE t1
FROM user t1
JOIN user t2
ON t1.name = t2.name
AND t1.id > t2.id;

✅ 保留 id 最小的一条


四、窗口函数去重(高级 & 推荐)

5️⃣ ROW_NUMBER()

SELECT *
FROM (
  SELECT *,
         ROW_NUMBER() OVER (
           PARTITION BY user_id
           ORDER BY create_time DESC
         ) rn
  FROM orders
) t
WHERE rn = 1;

✅ 每个用户只保留最新一条


五、防止重复数据(治本)

6️⃣ 建唯一索引

ALTER TABLE user
ADD UNIQUE (email);

总结对照表

目的 方法
查询去重 DISTINCT
分组取一条 GROUP BY
删除重复 DELETE + GROUP BY / JOIN
复杂去重 ROW_NUMBER()
防止重复 唯一索引

如果你能告诉我:

  • 使用的数据库(MySQL / Oracle / PostgreSQL)
  • 是查询还是删除
  • 按哪几个字段判断重复

我可以给你针对你场景的精准 SQL。

向AI问一下细节

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

AI
助
手