在使用Mysql的时候,我们经常要使用到DISTINCT关键字,这个关键字的作用就是去重,那我们在实际的开发过程中如何去使用它呢,接下来我们介绍一下。
一、数据库表(interview_person_info 面试人员信息表)
CREATE TABLE `interview_person_info` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '名称',
`university` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '学校',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '性别',
`province` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '所属省份',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
interview_person_info(原始数据)
二、使用DISTINCT关键字查询interview_person_info表中人员来着哪个学校
SELECT DISTINCT university FROM `person_info`
三、实际应用
场景:假如人员面试都通过,但是每个大学只有一个入职名额,需要做一些去重逻辑处理。这里需要保留的数据具体根据业务来定(可以保留先通过面试的人员,也就是ID最小的人员,也可以保留每个学校最后通过面试的人员,也就是ID最大的,当然改情况下可能是保留分数最高的人员),这里举例保留ID最小的人员。
1、查询需要去重的数据
- 首先查询出每组中ID最小的数据
select min(id) as id from person_info GROUP BY university
- 需要去重的数据
select * from person_info where id not in(select min(id) as id from person_info GROUP BY university)
2、删除需要去重的数据
delete from person_info where id not
in(select id from (select min(id) as id from person_info GROUP BY university) tb)