SQL中的去重

SQL中的去重

1. Distinct去重

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

DISTINCT会将NULL值也看做成一个不同的值。

DISTINCT去重

假如有一张员工表:

需要获取所有不重复的员工薪资和年龄的组合,如下编写SQL即可

sql 复制代码
SELECT DISTINCT age,salary
FROM Employee

结果:

2. Group By去重

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

sql 复制代码
SELECT age,salary
FROM Employee
GROUP BY age,salary

不过使用GROUP BY还可以实现聚合的效果,可以联合聚合函数一起使用。

还是上面的员工表,我需要获取每个部门的最高工资的人

sql 复制代码
-- 使用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. 唯一索引限制

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

sql 复制代码
CREATE UNIQUE INDEX index_name  ON Employee(age,salary)
相关推荐
2402_854808372 分钟前
Golang数组和切片有什么区别_Golang数组切片对比教程【通俗】
jvm·数据库·python
2401_865439633 分钟前
如何在 Go 中精确安装指定版本的模块
jvm·数据库·python
小菜同学爱学习7 分钟前
进阶实操!MySQL常用查询技巧(多场景案例+优化思路)
数据库·mysql
消失的旧时光-194311 分钟前
Spring Boot 实战(三):Service 分层 + 统一返回 + 异常处理(工程级写法)
java·spring boot·接口·解耦
云烟成雨TD12 分钟前
Spring AI Alibaba 1.x 系列【20】MessagesAgentHook 、MessagesModelHook 相关实现类
java·人工智能·spring
考虑考虑12 分钟前
SQL语句中的模糊查询注意
后端·sql·mysql
霸道流氓气质13 分钟前
SpringBoot中集成LangChain4j实现集成阿里百炼平台进行AI对话记忆功能和对话隔离功能
java·人工智能·spring boot·langchain4j
zhangchaoxies16 分钟前
c++ rpc框架选择 grpc和thrift哪个更适合c++
jvm·数据库·python
2301_8152795218 分钟前
怎么管理开启了审计日志的金融级数据库实例_合规访问控制
jvm·数据库·python
XS03010619 分钟前
Java 基础笔记(二)
java·笔记·python