mysql如何使用distinct去重

来源:苹果APP网作者:闲进程头衔:程序员
导读:本期聚焦于小伙伴创作的《mysql如何使用distinct去重》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《mysql如何使用distinct去重》有用,将其分享出去将是对创作者最好的鼓励。

在mysql的查询操作中,当我们需要从表中获取不重复的记录时,distinct是最常用的关键字之一,它可以过滤掉查询结果中重复的行,只保留唯一的记录。distinct的使用场景非常广泛,比如统计表中不重复的用户数量、获取某个字段的所有不同取值等。

distinct基本语法

distinct的基本使用语法非常简单,直接放在select关键字的后面即可,语法格式如下:

-- 单字段去重语法
SELECT DISTINCT 字段名 FROM 表名;

-- 多字段去重语法
SELECT DISTINCT 字段1, 字段2 FROM 表名;

需要注意的是,distinct必须放在所有查询字段的最前面,不能放在某个字段的中间位置,否则会触发语法错误。

单字段去重示例

假设我们有一张用户表user,表结构如下:

CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    age INT,
    city VARCHAR(50)
);

-- 插入测试数据
INSERT INTO user (name, age, city) VALUES
('张三', 20, '北京'),
('李四', 22, '上海'),
('张三', 25, '广州'),
('王五', 20, '北京'),
('李四', 22, '上海');

如果我们想要获取表中所有不重复的用户名,就可以使用单字段distinct查询:

SELECT DISTINCT name FROM user;

查询结果会返回三条记录,分别是张三、李四、王五,重复的张三和李四记录会被过滤掉。

多字段去重示例

distinct作用于多个字段时,是对多个字段的组合进行去重,只有当所有指定字段的值都相同时,才会被判定为重复记录。比如我们想要获取表中不重复的姓名和年龄组合:

SELECT DISTINCT name, age FROM user;

上述查询的结果会返回四条记录,分别是(张三,20)、(李四,22)、(张三,25)、(王五,20),因为(张三,20)和(张三,25)的年龄不同,所以不会被判定为重复,(李四,22)和(李四,22)完全重复,只会保留一条。

distinct和聚合函数搭配使用

distinct经常和count函数搭配使用,用来统计某个字段的不重复值的数量。比如统计user表中不重复的用户名数量:

SELECT COUNT(DISTINCT name) AS unique_user_count FROM user;

查询结果会返回3,对应三个不同的用户名。需要注意的是,count(distinct 字段名)的写法中,distinct必须放在count函数的括号内,不能写成DISTINCT COUNT(name),后者会先统计所有记录的数量再去重,不符合预期。

使用distinct的注意事项

  • distinct作用于null值的时候,会将所有的null值视为相同的值,只保留一个null记录。
  • 如果查询的字段中包含主键,那么使用distinct是没有意义的,因为主键本身就是唯一的,不会存在重复记录。
  • distinct的查询效率相对较低,如果表的数据量非常大,建议结合索引使用,或者考虑使用group by来实现去重,group by在某些场景下效率会更高。
  • distinct只能用在select语句中,不能用在insert、update、delete等其他语句中。

distinct和group by的区别

很多场景下distinct和group by都可以实现去重效果,比如单字段去重:

-- 使用distinct去重
SELECT DISTINCT city FROM user;

-- 使用group by去重
SELECT city FROM user GROUP BY city;

这两种写法的查询结果是一致的,但是group by的功能更强大,可以搭配聚合函数实现分组统计,而distinct只能实现单纯的去重。如果只是需要去重查询,两者都可以使用,根据实际场景选择即可。

mysqldistinct去重sql查询修改时间:2026-06-10 18:12:25

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。