SQL实例_7子查询二重条件筛选(完整演绎版)
作者:互联网
前言导读
这个实例的逻辑性也是非常强的,特别能锻炼逻辑思维,
虽然这个功能在pandas中的语法是很简单的.
一 创建演示数据
1新建表
create table 多重去重表 (编号 varchar(10) , 股室 varchar(50) , 职能 varchar(50),工资 int)
2插入数据
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)
3形成表格
编号 股室 职能 工资
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 单列去重,也无法全部显示字段
三 结构化实现
1 第一步:子句:筛选扩展列重复数据
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字段符合筛选条件,于是进行最小值筛选,其实也可以使用其他条件
通过从原始结果和筛选后的结果比较,确实是选择了数字最小的一条数据
2 第二步:父句:匹配原表去重目标列
select * from 多重去重表
where 工资 in ( select min(工资)
from 多重去重表
group by 股室)
--说明 子句中select中的其他新增列不能添加,不符合语句格式,只能选择条件筛选列
3 第三步:结论说明
通过对子句中'工资'字段筛选,从而确定'职能'的唯一性,
然后通过'股室'字段和父句原表匹配
4 扩展:直接删除数据
delete * from 多重去重表
where 工资 in ( select min(工资)
from 多重去重表
group by 股室)
(本章完)
所有资源均有PDF目录版,如想获得请扫码关注右侧公众号自动获取
标签:多重,股室,--,二重,重表,实例,SQL,筛选,职能 来源: https://www.cnblogs.com/PythonSQL/p/15397384.html