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)
相关推荐
GreatSQL3 分钟前
使用 gt-checksum 分析迁移对象
数据库
quququ_21385 分钟前
Java求职面试:从Spring Boot到微服务的全面考核
java·spring boot·微服务·面试·技术栈
用户6279947182625 分钟前
南大通用GBase8s数据库的create distinct type语句详解
数据库
倔强的石头1067 分钟前
【C++指南】位运算知识详解
java·开发语言·c++
bing_15815 分钟前
Nacos 客户端 SDK 的核心功能是什么?是如何与服务端通信的?
服务器·数据库·nacos 通信
掉鱼的猫15 分钟前
Java AI(智能体)编排开发就用 Solon Flow
java·后端·openai
掘金詹姆斯15 分钟前
LangChain4j—接入其他大模型(二)
java·人工智能
AnsenZhu23 分钟前
Redis Cluster 使用 CRC16 算法实现 Slot 槽位分片的核心细节
数据库·redis·缓存·crc16
徐寿春25 分钟前
规则引擎 - Easy Rules
java·开发语言