SQL Server中获取去重记录的正确方法:Distinct与Group By详解

花开有时
花开有时
发布时间:2026-10-15| 4人浏览过
原创

在SQL Server查询中,很多开发者会遇到“按某一列去重并返回对应行完整数据”的需求。常见的误区是直接在SELECT中使用DISTINCT关键字,但这仅能对指定列的整体组合进行去重。本文将解析常见误区,并提供正确的去重逻辑。

Distinct的基本行为与局限

首先看一张简单的表结构示例:

  • 字段1: id
  • 字段2: name

包含以下数据:

  1. ID=1, Name=a
  2. ID=2, Name=b
  3. ID=3, Name=c
  4. ID=4, Name=c
  5. ID=5, Name=b

场景一:仅查询不重复的Name

如果只希望看到唯一的名字列表,查询语句如下:

SELECT DISTINCT name FROM table;

结果将返回 a、b、c。这达到了预期效果,但丢失了ID等关联信息。

场景二:查询不重复的记录且包含ID

若直接修改为:SELECT DISTINCT name, id FROM table;,你会发现所有5条数据都被保留了。这是因为DISTINCT的作用对象是所有被选中的字段组合,只要(name, id)的组合不完全相同,就不会被视为重复记录。

场景三:语法错误尝试

部分初学者尝试将DISTINCT放在特定位置,例如:SELECT id, DISTINCT name FROM table;。这将直接引发语法错误。在T-SQL中,DISTINCT必须紧跟在SELECT之后。

正确解决方案:Group By分组

当我们需要“按Name去重”并“获取对应的ID及其他列数据”时,单纯使用DISTINCT是不够的。这里的核心逻辑是分组统计。

操作建议:

可以使用 GROUP BY 子句将数据按照 name 进行归类,从而消除重复的名字。

SELECT id, name, COUNT(DISTINCT name)
FROM table
GROUP BY name;

该语句的执行结果是:

  • id=1, name=a, count=1
  • id=2, name=b, count=1
  • id=3, name=c, count=1

注意:

上述结果中包含了冗余的计数列。在实际使用中,应根据具体业务筛选出需要的列。由于 GROUP BY 具有隐式的去重功能,只需对需要去重的字段进行分组即可达到目的。

语法执行注意事项

在使用 GROUP BY 进行复杂查询时,需严格遵循SQL语法的执行优先级,否则容易报错:

  1. 放置顺序: GROUP BY 必须位于 ORDER BY 和 LIMIT 之前。
  2. 聚合限制: 在 SELECT 列表中出现的非聚合字段(非COUNT/SUM/AVG等),通常都应出现在 GROUP BY 中(SQL Server的严格模式下尤其如此)。

以上就是SQL Server中Distinct及Group By实现去重的详细内容,更多关于SQL Server数据查询技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。