a連線帶id轉送不了資料 你找到了資料清洗利器?

2021-10-13 18:50:29 字數 1540 閱讀 6452

為什麼筆者突然要提起它呢?原因,竟是!

哈哈uc瀏覽器的風格無疑了。其實原因很簡單,就是筆者經常閱讀同事寫的**。然後經常看到在表連線時會出現nvl函式。因為我寫nvl函式的習慣,所以就好奇了。到底它是何方神聖,竟引得同事爭相寫它?

首先,我們來看nvl函式的解釋。

圖一 nvl函式的解釋

這個函式的解釋較為簡單,需要填寫兩個引數——表示式a和表示式b。

其中,當表示式a的值不為空時,輸出表示式a的值;若表示式a的值為空,則輸出表示式b的值。同時必須確保表示式a和b的資料型別一致。若a的結果是數值型的,則b也必須是數值型;若a為字串型,則b也必須為字串型。

通過回想同事應用的場景——表連線時使用,我有所領悟。

試想這樣一種場景,有班級人員表t1和學生資訊表t2。

在t1表中,有以下欄位和取值:

班級class_id

學生學號 student_id

學生性別

student_***

甲班甲1m甲班

甲2f甲班m

甲班f乙班乙1

m 在t2表中,有以下欄位和取值:

學生學號 student_id

學生性別

student_***

學生家鄉

student_hometown

學生身高 student_height甲1m

上海177甲2f

杭州160m寧波

190乙1m常州

172 從取值可以看出,t1和t2表的主鍵都是學生學號student_id。所以在連線表時,很容易想到用t1.student_id = t2.student_id 。

但是由於人為錄入遺漏資料,且兩表都沒有主鍵驗證是否為空的機制。出現了t1、t2表中有學號為空的情況。仔細觀察,t1表中第三行記錄有可能對應的是t2表中的第三行記錄(但不一定),但t1表中第四行記錄絕不可能對應t2表的第三行記錄(性別不一樣)。

倘若在left join時on 條件寫成t1.student_id = t2.student_id。那麼對於t1表t1.student_id為null時,有2條記錄。而t2表t2.student_id為null時,有1條記錄。根據人工思維,null值=null值,那麼就會出現t1表的第三行和第四行都用t2表的第三行匹配成功。而事實上這種匹配是無意義的,故而我們需要將t1.student_id做資料清洗,防止「髒」資料造成結果混亂。

現將on條件改為 nvl(t1.student_id, 「nonono」) = t2.student_id。那麼左表連線時就不會出現null值,右表主鍵為null時,視為「無效」資料,永遠不能匹配到左表上。防止了混亂結果出現。

經歷了這波思考,感覺乙個小小的nvl函式,真香啊~

不了解大資料的這些用途,你學什麼大資料

了解使用者特徵 給企業和商業帶來巨大價值 網路瀏覽歷史記錄以及使用的應用等資料銷售給廣告客戶。當使用者距離商家很近時,就有可能收到該商家提供的折扣很大的電子優惠券等等。為個人帶來福利 大資料可以輔助臨床診斷和用藥決策 為公共衛生機構提供及時的統計分析 以及為藥品研發 方案設計提供資料分析。隨著大資料...

pyhton 連線資料庫及帶引數插入資料

前言 最近做專案要把新聞的標題,內容,鏈結提取出來,放入資料庫。花了2天半的時間弄這個,踩了一些坑,記錄下來。pymysql連線資料庫 開啟資料庫連線 db pymysql.connect 47.107.41.60 root 密碼 wisdomagriculture 使用cursor 方法獲取操作游...

你確定不了解一下什麼是「鍊錶」資料結構嗎?

最近公司太忙了,已經連續工作兩周了。不知道你們趕專案的時候加班嚴重嗎?雖然最近白天工作加班,晚上還要熬夜寫文章,感覺很累,但是每次寫完發布之後看著閱讀量一點點的增加,偶爾還有人給我點讚,就會感覺很開心,很有成就感。在此謝謝大家閱讀我的文章並給我點讚,我一定會努力寫好每一篇的文章的。開始正文前請接受我...