SQL去重是我们在使用SQL进行数据库操作时的一个常见操作,用于从数据集中消除重复的记录。今天就为大家分享四种常用的SQL去重方法,包括使用DISTINCT关键字,使用GROUP BY子句,使用ROW_NUMBER()函数,以及使用EXISTS子查询,下面就来为大家具体讲讲每个方法的用法,希望能够帮助到有需要的网友。
SQL去重
方法一、使用DISTINCT关键字
DISTINCT关键字可以在查询结果中去除重复的行,只保留唯一的行。例如,如果要查询员工表中不同的部门名称,可以使用以下语句:
SELECT DISTINCT dept_name FROM employees;
方法二、使用GROUP BY子句
GROUP BY子句可以根据一个或多个列对查询结果进行分组,然后可以对每个分组应用聚合函数,如COUNT、SUM、AVG等。如果只想去重,而不需要聚合函数,可以使用GROUP BY子句配合任意一个聚合函数,如MIN、MAX等。例如,如果要查询员工表中不同的部门名称和部门编号,可以使用以下语句:
SELECT dept_name, dept_no, MIN(emp_no) FROM employees GROUP BY dept_name, dept_no;
方法三、使用ROW_NUMBER()函数
ROW_NUMBER()函数可以为每一行分配一个序号,根据一个或多个列进行排序。如果想去重某些列,可以使用ROW_NUMBER()函数配合一个子查询,只选择序号为1的行。例如,如果要查询员工表中不同的部门名称和部门编号,可以使用以下语句:
SELECT dept_name, dept_no FROM (
SELECT dept_name, dept_no, ROW_NUMBER() OVER (PARTITION BY dept_name, dept_no ORDER BY emp_no) AS rn FROM employees
) AS t WHERE rn = 1;
方法四、使用EXISTS子查询
EXISTS子查询可以判断一个子查询是否返回至少一行结果。如果想去重某些列,可以使用EXISTS子查询配合一个相关子查询,只选择不存在重复值的行。例如,如果要查询员工表中不同的部门名称和部门编号,可以使用以下语句:
SELECT dept_name, dept_no FROM employees e1 WHERE NOT EXISTS (
SELECT 1 FROM employees e2 WHERE e2.dept_name = e1.dept_name AND e2.dept_no = e1.dept_no AND e2.emp_no < e1.emp_no
);