前言导读
这个实例的逻辑性也是非常强的,特别能锻炼逻辑思维,
虽然这个功能在pandas中的语法是很简单的.
create table 多重去重表 (编号 varchar(10) , 股室 varchar(50) , 职能 varchar(50),工资 int)
insert into 多重去重表 values ('A','股室1','职能1',100) insert into 多重去重表 values ('B','股室1','职能2',200) insert into 多重去重表 values ('C','股室3','职能3',300) insert into 多重去重表 values ('D','股室4','职能5',500) insert into 多重去重表 values ('E','股室4','职能7',600)
编号 股室 职能 工资 A 股室1 职能1 100 B 股室1 职能2 200 C 股室3 职能3 300 D 股室4 职能5 500 E 股室4 职能7 600
--1需求说明: 1 通过数据表观察,需要对'股室'字段进行去重处理 2 但是相同的'股室'在'职能'字段有不同的信息 3 重点:要显示所有字段 --2遇到问题: 如果直接使用group by 分组,就无法全部显示字段, 如果直接使用distinct 单列去重,也无法全部显示字段
select 股室,min(工资) ,count(*) from 多重去重表 group by 股室 order by count(*) desc --原数据 编号 股室 职能 工资 A 股室1 职能1 100 B 股室1 职能2 200 C 股室3 职能3 300 D 股室4 职能5 500 E 股室4 职能7 600 --查询结果 股室1 100 2 股室4 500 2 股室3 300 1 --说明: 通过观察,'股室'字段有重复,需要去重,'职能'字段有不同,因此需要对'职能'字段选出一条数据 通过观察,'工资'字段是数值型数据,因此通过工资额的最小值筛选,筛选出唯一职能选项 因为需要横向的数据完整性,因此需要将目标列重复而横向列不重复的信息进行二层删选 通过表观察,发现BDCQZH字段符合筛选条件,于是进行最小值筛选,其实也可以使用其他条件 通过从原始结果和筛选后的结果比较,确实是选择了数字最小的一条数据
select * from 多重去重表 where 工资 in ( select min(工资) from 多重去重表 group by 股室) --说明 子句中select中的其他新增列不能添加,不符合语句格式,只能选择条件筛选列
通过对子句中'工资'字段筛选,从而确定'职能'的唯一性, 然后通过'股室'字段和父句原表匹配
delete * from 多重去重表 where 工资 in ( select min(工资) from 多重去重表 group by 股室)
所有资源均有PDF目录版,如想获得请扫码关注右侧公众号自动获取