SQL Server中DISTINCT关键字用法及单语句统计多字段去重数
嘿,我来帮你理清SQL Server里DISTINCT的用法,还有你要的单条语句统计每个字段去重数量的方法~
先搞懂
DISTINCT的核心作用 首先得明确:DISTINCT是对整行返回数据进行去重,而不是针对单个字段生效。你之前尝试的select id, distinct name, age这类写法是不符合SQL语法的——DISTINCT只能放在SELECT关键字之后,作用于所有返回字段的组合。比如select distinct id, name, age from dbo.XXX,这条语句返回的是id+name+age三者组合起来不重复的行,并不是每个字段单独去重后的结果。
单条SQL统计每个字段的去重数量
如果想要在一条语句里分别统计id、name、age各自的去重种类数量,你需要用COUNT(DISTINCT 字段名)的写法,具体实现如下:
select COUNT(DISTINCT id) as distinct_id_count, COUNT(DISTINCT name) as distinct_name_count, COUNT(DISTINCT age) as distinct_age_count from dbo.XXX
执行这条语句后,你会得到一行结果,三个列分别对应id、name、age的去重数量。
举个实际例子,假设你的表数据是:
| id | name | age |
|---|---|---|
| 1 | Alice | 25 |
| 1 | Bob | 25 |
| 2 | Alice | 30 |
| 2 | Alice | 30 |
执行上面的SQL后,结果会是:
| distinct_id_count | distinct_name_count | distinct_age_count |
|---|---|---|
| 2 | 2 | 2 |
补充小提示
- 如果你的需求是查看每个字段的所有去重值(而不是数量),那可能需要用
UNION或者子查询的方式实现,但如果只是统计数量,COUNT(DISTINCT)是最直接高效的方案。 - 注意:如果字段存在
NULL值,COUNT(DISTINCT)会自动忽略NULL,因为SQL里NULL和NULL并不被视为相等的重复值。
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

