在 SQL 中,“数据去重”通常分为 查询结果去重 和 表数据去重(删除重复数据) 两种场景。下面按常见用法说明(以 MySQL 为例,其他数据库类似)。
对查询结果整体去重:
SELECT DISTINCT col1, col2
FROM table_name;
✅ 多列时,是对 整行组合 去重
常用于聚合去重:
SELECT col1, MAX(col2)
FROM table_name
GROUP BY col1;
id | name | age
1 | Tom | 20
2 | Tom | 20
3 | Lucy | 22
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
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 去重,保留第一行
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。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。