如何在mysql中使用distinct_mysql distinct去重语句说明

来源:这里教程网 时间:2026-02-28 20:35:16 作者:

DISTINCT 是 MySQL 中用于去除查询结果中重复行的关键字,它作用于整个 SELECT 列表,而不是单个字段。

distinct 的基本用法

在 SELECT 后紧跟 DISTINCT,会返回唯一组合的记录。例如:

SELECT DISTINCT name FROM users; —— 返回所有不重复的姓名 SELECT DISTINCT city, province FROM addresses; —— 返回城市与省份的唯一组合(即使 city 相同,只要 province 不同就算不同行)

distinct 只对查询字段生效

DISTINCT 依据的是 SELECT 子句中列出的所有列值构成的“元组”。哪怕只多选一个字段,去重逻辑就完全不同:

SELECT DISTINCT id, name FROM users; —— 即使 name 相同,只要 id 不同,整行就不算重复 想按 name 去重并取某条对应记录(如最新一条),DISTINCT 无法实现,需改用 GROUP BY 或窗口函数

distinct 与 count 配合统计去重数量

常用写法:SELECT COUNT(DISTINCT name) FROM users;

统计不重复的 name 数量 支持多字段:COUNT(DISTINCT city, province) 统计城市+省份组合数 注意:NULL 值在 DISTINCT 中被视为相同值,多个 NULL 只算一个

distinct 的限制和替代方案

DISTINCT 不能跳过某些列去重,也不能指定保留哪一条重复数据。

若需“按 name 去重,同时取 age 最大的那条”,应使用 GROUP BY + 聚合函数:SELECT name, MAX(age) FROM users GROUP BY name; 若需完整行且带条件筛选(如最新创建时间),推荐用 ROW_NUMBER() 窗口函数(MySQL 8.0+)或关联子查询 DISTINCT 会隐式排序(部分版本),但不保证顺序,如需确定顺序,必须显式加 ORDER BY

相关推荐