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

9次阅读

DISTINCT 用于去除 SELECT 结果中重复行,作用于整个字段列表而非单个字段;依据所有 SELECT 列构成的元组去重,支持与 COUNT 配合统计去重数量,但无法指定保留哪条重复记录,需用 GROUP BY 或窗口函数替代。

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

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
text=ZqhQzanResources