在 SQL 中,“过滤重复数据”通常有以下几种常见场景和写法,按使用频率从高到低说明:
DISTINCT用于查询结果中去重(整行相同才去重)
SELECT DISTINCT column1, column2
FROM table_name;
✅ 示例:
SELECT DISTINCT name
FROM user;
GROUP BY按某些字段分组,通常配合聚合函数
SELECT user_id, MAX(create_time)
FROM orders
GROUP BY user_id;
✅ 保留每个用户最新的一条订单
DELETE FROM table_name
WHERE rowid NOT IN (
SELECT MIN(rowid)
FROM table_name
GROUP BY col1, col2, col3
);
⚠️
rowid是 Oracle / SQLite 用法
MySQL 可用主键或自增 ID 代替
DELETE t1
FROM user t1
JOIN user t2
ON t1.name = t2.name
AND t1.id > t2.id;
✅ 保留 id 最小的一条
ROW_NUMBER()SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY user_id
ORDER BY create_time DESC
) rn
FROM orders
) t
WHERE rn = 1;
✅ 每个用户只保留最新一条
ALTER TABLE user
ADD UNIQUE (email);
| 目的 | 方法 |
|---|---|
| 查询去重 | DISTINCT |
| 分组取一条 | GROUP BY |
| 删除重复 | DELETE + GROUP BY / JOIN |
| 复杂去重 | ROW_NUMBER() |
| 防止重复 | 唯一索引 |
如果你能告诉我:
我可以给你针对你场景的精准 SQL。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。