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)
相关推荐
荒川之神4 分钟前
ORACLE 11G的审计
数据库·oracle
WZTTMoon5 分钟前
VS Code Java开发配置与使用经验分享
java·vscode
语戚8 分钟前
力扣 494. 目标和 —— 回溯 & 动态规划双解法全解(Java 实现)
java·算法·leetcode·动态规划·力扣·dp·回溯
YXWik69 分钟前
Langchain4j(3) Prompt 提示词工程 + PromptTemplate + SystemMessage 高级用法
java·ai·prompt
StackNoOverflow10 分钟前
MySQL 的性能调优(第一部分)
数据库·mysql
StarShip10 分钟前
JVM堆栈溢出监测原理
android·java
君穆南11 分钟前
MySQL备份脚本
数据库·mysql·adb
数据库知识分享者小北12 分钟前
告别后端上下文断层!体验用 PolarDB Supabase 助力 AI 原生 IDE 完成 VibeCoding领取试用及多重好礼
数据库·人工智能·阿里云·关系型数据库·polardb·vibecoding
北极的代码21 分钟前
2026年Java后端热点科普:Java 26新特性+Java 21落地实战,解锁后端开发新范式
java·后端
敖正炀26 分钟前
深入对比 Java 并发工具:CyclicBarrier、CountDownLatch 与 Semaphore
java