SQL 對郵箱資料的處理(分類統計)
阿新 • • 發佈:2020-12-07
需求
在許多業務場景中,需要處理使用者的郵箱資訊,為了探索不同郵箱的不同特定,便於對使用者進行分類處理,需要對郵箱進行處理。
前、字尾分離
郵箱的格式大致是一致的 字首@字尾
的樣式。需要將郵箱進行分類。
[email protected] |
[email protected] |
明顯看到他們前後綴通過 @
複合連線,將他們分別分離成兩列即可。
select email_list[0] as pre_email , email_list[1] as pro_email from ( select split(email,'@') email_list from table a ) a
結果是:
pre_email | pro_email |
---|---|
123456 | qq.com |
123456 | 163.com |
此時可以檢視,究竟有那些郵箱的字尾,計數是多少,便於進行分類。
select pro_email, count(*) cnt
from table
group by pro_email
字首的處理
對於字首,主要可以為以下幾種型別
- 手機號:
13579246810
- 純數字:
3123443242(
這種可能會與手機號重複,因此需要先篩選手機號) - 純字母:
qwert
- 字母與數字:
xiaoming1982
- 其他:
xiaoming_19
分類程式碼如下:
case when pre_email rlike "^(\\+?86)?((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|161|166|198|199|(147))\\d{8}$" then '手機號' when pre_email rlike '^\\d+$' then '純數字' when pre_email rlike '^[a-zA-Z]*$' then '純字母' when pre_email rlike '^[a-z0-9A-Z]+$' then '字母與數字' else '其他' end as pre_flag
字尾的處理
字尾主要是公司,可以根據使用的場景,檢視那些郵箱用的比較多,定義對應的字尾漢語名稱。
- 騰訊郵箱:
qq.com
,qq.vip.com
,foxmail.com
- 網易郵箱:
163.com
,126.com
,yeah.cn
- 電信郵箱:
139.com
,189.com
分類程式碼如下:
case when pro_email rlike '.*(163|126|yeah).*' then '網易郵箱' when pro_email rlike '.*(sina).*' then '新浪郵箱' when pro_email rlike '.*(qq|foxmail).*' then '騰訊郵箱' when pro_email rlike '.*(sohu).*' then '搜狐郵箱' when pro_email rlike '.*(139|189).*' then '電信郵箱' else 'others' end as pro_flag
統計
這樣就可以處理成不同的組合。進行單獨、交叉統計。
-- 交叉統計
select pre_flag, pro_flag, count(*) cnt
from table
group by pre_flag, pro_flag