distinct的语法

「distinct」的语法主要出现在 SQL 查询里,指对结果去重。它和 SELECT 语句、字段选择以及聚合逻辑密切相关,是数据库入门时最容易用错的关键词之一。
基本含义与用途
在 SQL 中,DISTINCT 放在 SELECT 之后,用来去掉查询结果中的重复行。例如 `SELECT DISTINCT 城市 FROM 用户表` 会返回不重复的城市列表。它作用于整行结果:写多个字段时,只有这些字段的组合完全相同才会被去掉,而不是只对第一个字段去重。除了 SELECT,COUNT(DISTINCT 字段) 也常用于统计某列有多少个不同取值,比如统计有多少个不同城市。
常见问题
最常见的误区是以为 `SELECT DISTINCT 城市, 姓名` 只对城市去重,实际上它按“城市+姓名”的组合去重。其次,DISTINCT 通常带来额外的排序或去重开销,数据量大时会影响性能。还有一点容易忽略:DISTINCT 会把 NULL 视为一个值,多个 NULL 只保留一个。另外,它不能和 SELECT * 之外的某些写法随意混用,也不能直接用在 WHERE 子句里。
怎么判断与怎么选
如果只想去掉完全重复的行,用 DISTINCT 最直接;如果只想统计不同取值个数,用 COUNT(DISTINCT 字段) 更合适;如果需要对分组后的结果去重,应优先考虑 GROUP BY。判断时先问自己:去重对象是整行还是某一列?数据量是否很大?是否需要同时做统计?想清楚这几点,就能在 DISTINCT、GROUP BY 和普通查询之间做出合适选择。