在 SQL Server 中,可以使用 ROW_NUMBER()
函数结合 CTE (Common Table Expression)
来实现去重并取第一行的功能。以下是一个具体的例子:
假设我们有一个名为 employees
的表,其中包含员工的信息,如下所示:
id | name | department | salary |
1 | 张三 | IT | 5000 |
2 | 李四 | IT | 6000 |
3 | 王五 | HR | 4500 |
4 | 赵六 | IT | 5000 |
5 | 钱七 | HR | 4500 |
我们希望根据部门去重,并保留每个部门薪水最高的员工信息。可以使用以下 SQL 语句实现:
WITH CTE AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS row_num
FROM employees
)
SELECT id, name, department, salary
FROM CTE
WHERE row_num = 1;
执行上述 SQL 语句后,将得到以下结果:
id | name | department | salary |
2 | 李四 | IT | 6000 |
3 | 王五 | HR | 4500 |
在这个例子中,我们首先使用 ROW_NUMBER()
函数为每个部门的员工分配一个行号,按照薪水降序排列。然后,我们在 CTE
中筛选出行号为 1 的记录,即每个部门薪水最高的员工信息。
重点:
在SQL Server中,去重取第一行的需求常见于需要处理包含重复记录的数据表时,我们希望保留每组重复数据的第一条记录,删除其余重复的记录。这可以通过多种方法实现,但其中一种高效且常用的方法是使用ROW_NUMBER()
函数。