書名: 對比Excel,輕松學習SQL數據分析作者名: 張俊紅本章字數: 1119字更新時間: 2020-07-23 16:42:03
6.1 缺失值處理
我們在數據庫中存儲的數據一般都會由于各種原因存在缺失值,我們需要對這部分數據進行處理。一般的處理方式有兩種:第一種是直接把缺失值過濾掉,第二種是對缺失值進行填充。
1. Excel實現
對第一種處理方式,在Excel中,我們可以通過篩選的方式將非缺失值部分篩選出來,從而就可以得到過濾掉缺失值以后的數據了。

對第二種處理方式,我們可以通過篩選的方式將缺失值部分篩選出來,然后手動填充上我們想要的值。我們也可以通過空值定位條件來對全表中的缺失值進行統一填充。先按Ctrl+G快捷鍵調出“定位”對話框,然后單擊“定位條件”按鈕,在彈出的“定位條件”對話框中選擇“空值”選項,最后單擊“確定”按鈕。這樣就會把所有的缺失值單元格選中,在第一個缺失值單元格內輸入想要填充的值,輸入以后按Ctrl+ Enter快捷鍵就可以對所有缺失值進行填充。

2. SQL實現
對第一種處理方式,在SQL中,我們可以通過where進行過濾,具體實現代碼如下:
select * from demo.chapter6 where profession != ""
運行上面的代碼,我們就可以得到過濾掉缺失值以后的數據,具體運行結果如下表所示。

!=表示不等于,""表示空值,缺失值有空格、null和空值三種表現形式,前兩種形式雖然也表示缺失值,但是在對應的單元格內是有值的,而后一種空值是沒有值的,表示這個單元格什么都沒有。
如果缺失值是用空格表示的,要過濾掉缺失值,where后面就需要改成profession != " ";如果缺失值是用null表示的,要過濾掉缺失值,where后面就需要改成profession is not null。
上面的處理方式把profession列是缺失值的行都過濾掉了,所以這種處理方式會把其他非缺失值的字段過濾掉,而造成數據的浪費。我們可以將profession列中的缺失值填充為其他,而不是直接過濾掉,這就是針對缺失值的第二種處理方式,使用的是coalesce()函數,具體實現代碼如下:
select order_id ,memberid ,coalesce(profession,"其他") from demo.chapter6
運行上面的代碼,具體運行結果如下表所示。

上面的結果并不是我們想要的,profession列的缺失值并沒有填充成其他。
這是因為coalesce()函數的形式為(null,null,...,null,value)。
如果value前面的值均為null,則缺失值被填充為value。我們在前面講過,用來表示缺失值的空值和null是有區別的,這里面的缺失值是空值而非null,所以coalesce()函數沒有生效。
運行下面的代碼,就可以得到我們想要的結果:
select coalesce(null,"我是填充值")
運行上面的代碼,得到的結果為我是填充值。
對于這種缺失值是空值的情況,我們可以用if條件語句來進行處理,關于if條件語句,后續章節會詳細講述。
讀者有沒有注意到,上面的代碼中只有select,而沒有from,按照我們之前的理解,要想select必須先指明從哪里select,也就是應該要有from。可是為什么上面的代碼中雖然沒有寫from,但依然可以得出結果呢?這是因為select部分不需要依賴于任何表的數據,全部是由我們手動填充的,我們只是利用了SQL中提供的功能對我們手動填充的數據進行運算。比如,我們還可以進行如下運算:
select 1 + 1
運行上面的代碼,最后得到的結果為2。
- 創意UI:Photoshop玩轉移動UI設計
- Illustrator CS6核心應用案例教程(全彩慕課版)
- Photoshop CC 服裝設計經典實例教程
- Procreate+ SketchUp +Photoshop建筑設計手繪表現技法
- Photoshop圖形圖像處理實用教程
- BIRT 2.6 Data Analysis and Reporting
- Building Websites with Joomla! 1.5
- JBoss RichFaces 3.3
- Instant Markdown
- 24小時玩賺剪映
- Photoshop+CorelDRAW平面設計實例教程(第3版)
- Magento 1.4 Development Cookbook
- EJB 3.1 Cookbook
- TYPO3 4.3 Multimedia Cookbook
- 中文版Illustrator CS6基礎培訓教程(第2版)