加入收藏 | 设为首页 | 会员中心 | 我要投稿 四平站长网 (https://www.0434zz.com.cn/)- 云服务器、对象存储、基础存储、视频终端、数据应用!
当前位置: 首页 > 大数据 > 正文

UNION ALL这么用,从摸鱼学徒晋升摸鲸校尉

发布时间:2021-06-03 21:24:40 所属栏目:大数据 来源:互联网
导读:身为数据分析师,大家对SQL可是再熟悉不过了。大多数人对常规的sql语法都已经熟练掌握,但是我发现在工作中许多同学join用的比较多,union all只有在纵向合并表格的时候用得到。如果仅仅是这样用,那么union all 的价值就被大打折扣了,今天给大家分享一下我
身为数据分析师,大家对SQL可是再熟悉不过了。大多数人对常规的sql语法都已经熟练掌握,但是我发现在工作中许多同学join用的比较多,union all只有在纵向合并表格的时候用得到。如果仅仅是这样用,那么union all 的价值就被大打折扣了,今天给大家分享一下我在工作中经常用的union all技巧,希望可以帮到大家。
分组
用户分群对于数分同学来说可以说是家常便饭,这里我们来思考一个问题,如果一个用户可以同时存在多种属性,如何将用户全部分开呢?举例来说,下面有张表记录了用户收养宠物的信息,仅有两个字段,uid,pets
 
对用户分群,有些同学是这么做的:假如宠物仅有猫和狗两类,那么用户可以分为三类,仅养狗,仅养猫,既养狗又养猫
--仅养狗 
select  
uid,'dog_only' as type from pets_table a where pets='狗' 
where not exists(select uid from pets_table b where pets='猫' and a.uid=b.uid)  
group by uid 
 
--仅养狗 
select  
uid,'cat_only' as type from pets_table a where pets='猫' 
where not exists(select uid from pets_table b where pets='狗' and a.uid=b.uid) 
group by uid 
 
--养狗又养猫 
select  
uid,'dog_cat' as type from pets_table a where pets='猫' 
where exists (select uid from pets_table b where pets='狗' and a.uid=b.uid) 
group by uid 
如果除了养猫和养狗之外,还有仓鼠呢?
那么用户可以分为七类,分别为,仅养猫,仅养狗,仅养仓鼠,养猫和仓鼠,养猫和狗,养狗和仓鼠,三个都养。
首先通过上述例子我们总结一个规律
属性个数n与分组的数量m的关系满足:m=2^n-1。
可见分组的数量与属性个数之间存在指数关系,当属性个数大于三个后,如果使用上述sql进行分类将会非常复杂。有没有简单的方法呢?为了解释这个问题,我们用维恩图来表示上述案例
 
我们将图一中的七类用图二来表示,养猫标记为1(红色),养狗标记为10(绿色),养仓鼠标记为100(蓝色)。那么就可以根据叠加之后的值来对区分,叠加后的数字与组别对应关系
那么1=1;2=10;3=100;4=101;5=110;6=11;7=111
理论可行,那么在实际应用中应该怎么操作呢?

(编辑:四平站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读