前言導讀
這個實例的邏輯性也是非常強的,特別能鍛煉邏輯思維,
雖然這個功能在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目錄版,如想獲得請掃碼關注右側公眾號自動獲取