公司籌備敲鐘上市,審計作業正在進行,我們小組的兩位同學也參與了一部分資料分析作業,
先介紹一個用戶表(t_soho)的關鍵欄位:user_name-varchar(32)-用戶姓名、id_card-varchar(255)-身份證號碼(密文存盤)、create_time-datetime-注冊時間
其中有一項資料統計是按身份證號來分組統計,
互為備份的兩位同學各自撰寫sql陳述句,執行后發現雙方結果存在差異,如下是雙方的sql,其中的FUN_DECRYPTION是解密函式,差異是第一條陳述句執行出來的結果比第二條多了一些,
SELECT ... FROM t_soho WHERE ... GROUP BY `FUN_DECRYPTION`(id_card); SELECT ... FROM t_soho WHERE ... GROUP BY id_card;
可見,區別就在于一個對資料解密了,一個是沒有解密,
按說無論是明文資料還是密文資料,應該不影響計數吧, 那么,既然上面雙方結果不一樣,必然是哪里出現問題了,
兩同學經分析,認為可能是存在空格字符導致的,比如:11011519920120718X的密文與11011519920120718X (X后面有一個空格)的密文是不同的,程式如果不處理這種空格字符,t_soho表里就會出現兩個不同的密文欄位值,
分析歸分析,認為歸認為,是不是這么一回事,就需要驗證其準確性,
一位同學很快證實,上面的差異確是空格字符導致的,他是這么驗證的:select a,count(1) from (SELECT 'test' as a union all select 'test ') as table1 group by a
另一個同學稍后也證實了這個分析的正確性,他的驗證方法是修改表的資料,即,在同一欄位上存在兩行相同的文本,其中一個后面敲上一個空格,然后求group by,
前面這種“不一樣的方式”,就是技巧!
我們再看另一件事,
excel里有一張復雜的報告,需要統計每月注冊用戶在后面逐月的活躍度,

這個比較麻煩,一個sql出來所有資料比較費勁,我們的一個小伙伴廢了九牛二虎之力,花了一個小時,終于完成,他的實作步驟是,寫出來sql后,將執行結果復制到excel里,然后行轉列,挨個兒粘貼到每月的單元格里;這一行結束后,繼續修改sql中的月份,按同樣的操作方式來完成下月的資料行,直到完成所有月份的資料行,而后來在check時,發現他的sql有問題,前功盡棄,小伙不禁長吁短嘆,
用一個通俗的例子,比如現在正值疫情期間,我們從菜市場買回來的蔬菜水果,要消毒存放,一種方式是一樣一樣的消毒和存放,再一種方式是先統一消毒,然后統一存放,我們建議是利用后者這種方式,
上面這個案例中,我們使用excel的行轉列屬于技能;而批量操作的方式,則是技巧,省去了mysql客戶端和excel來回切換操作所花費的時間,
技能固然重要,如果再掌握一定的技巧,豈不是錦上添花如虎添翼!
老母親收拾家務,遞過來一片金黃的薄脆餅干,嘮叨了一聲,“買東西送的三小袋餅干,這餅干還挺好吃!”我不自覺聽到,然后看了一下包裝,是巖燒芝士脆,“芝士”就是力量,趕緊安排去!

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/374013.html
標籤:其他
