SQL中的去重

avatar
作者
猴君
阅读量:0

SQL中的去重

1. Distinct去重

说明:DISTINCT 关键字用于返回唯一不同的值,一般放在查询语句中的第一个字段前使用。
DISTINCT会将NULL值也看做成一个不同的值。

DISTINCT去重

假如有一张员工表:
在这里插入图片描述
需要获取所有不重复的员工薪资和年龄的组合,如下编写SQL即可

SELECT DISTINCT age,salary FROM Employee 

结果:
在这里插入图片描述

2. Group By去重

GROUP BY也可以达到类似的效果

SELECT age,salary FROM Employee GROUP BY age,salary 

不过使用GROUP BY还可以实现聚合的效果,可以联合聚合函数一起使用。
还是上面的员工表,我需要获取每个部门的最高工资的人

-- 使用JOIN连表 SELECT e.department_id, e.name, e.salary FROM Employee e JOIN (     SELECT department_id, MAX(salary) AS max_salary     FROM Employee     GROUP BY department_id ) AS max_salaries ON e.department_id = max_salaries.department_id    AND e.salary = max_salaries.max_salary; -- 使用EXISTS条件判断 SELECT e.department_id, e.name, e.salary FROM Employee e WHERE EXISTS (     SELECT 1     FROM (         SELECT department_id, MAX(salary) AS salary         FROM Employee         GROUP BY department_id     ) AS m  		WHERE m.department_id = e.department_id AND m.salary = e.salary );  

3. 唯一索引限制

可以创建一个唯一索引,用来在源头上控制重复数据的插入

CREATE UNIQUE INDEX index_name  ON Employee(age,salary)