温馨提示×

温馨提示×

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

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

SQL的DISTINCT如何去重

发布时间:2026-10-07 05:42:25 来源:亿速云 阅读:94 作者:小樊 栏目:数据库

在 SQL 中,DISTINCT 用于对查询结果去重,它会移除结果集中完全相同的行。


一、基本用法(对整行去重)

SELECT DISTINCT 列1, 列2, ...
FROM 表名;

示例

SELECT DISTINCT dept_id
FROM employee;

➡ 返回所有不重复的 dept_id


二、对多列去重(组合去重)

DISTINCT 是对所有选中列的组合去重,而不是单独对某一列。

SELECT DISTINCT name, dept_id
FROM employee;

➡ 只有当 name + dept_id 完全相同时,才会被去重


三、常见误区

❌ 误以为只对某一列去重

SELECT DISTINCT name, salary
FROM employee;

这不是“按 name 去重”,而是“按 name + salary 去重”。


四、与聚合函数一起用

SELECT DISTINCT dept_id, COUNT(*)
FROM employee
GROUP BY dept_id;

(这里通常不需要 DISTINCT,GROUP BY 已去重)


五、只想去重某一列但保留其他列?

DISTINCT 做不到,需要用:

✅ 方法 1:GROUP BY

SELECT name, MAX(salary)
FROM employee
GROUP BY name;

✅ 方法 2:窗口函数(推荐)

SELECT *
FROM (
  SELECT *,
         ROW_NUMBER() OVER (PARTITION BY name ORDER BY salary DESC) rn
  FROM employee
) t
WHERE rn = 1;

六、DISTINCT 的执行特点

  • 会排序 + 去重,大数据量可能较慢
  • 等价于 GROUP BY 所有选中列

如果你有具体 SQL 场景(比如“按某列去重但保留最新记录”),可以发出来,我帮你写最优写法。

向AI问一下细节

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

AI
助
手