SQL 对邮箱数据的处理(分类统计)

需求

在许多业务场景中,需要处理用户的邮箱信息,为了探索不同邮箱的不同特定,便于对用户进行分类处理,需要对邮箱进行处理。

前、后缀分离

邮箱的格式大致是一致的 前缀@后缀 的样式。需要将邮箱进行分类。

email
123456@qq.com
xiaoming@163.com

明显看到他们前后缀通过 @ 复合连接,将他们分别分离成两列即可。

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
posted @ 2020-12-07 14:30  何大卫  阅读(731)  评论(0编辑  收藏  举报