我是程序员,很多人认为,sql就是一种语言,其实不然,sql不仅仅是语言,学sql还要学会数据分析的方法论,否则没有意义。
学sql,首先应该学会正确理解数据分析的需求,公司里面,通常有商品粒度、订单粒度、用户粒度等不同粒度的数据,你应该学会根据实际的分析需求,设计这些数据表。
很多人表面上会sql,实际上根本不理解数据分析的基本概念——维度和指标,维度是group by 后面跟的分类变量,指标是聚合函数聚合起来的值。
指标通常有求和、平均、计数、去重计数等多种计算方式,所以你应该思考在sql里,sum(a*b)形式的指标有哪些,count(distinct concat(a,b))又可以产生哪些有用的指标。
那如果更复杂一点,count(distinct concat(case when , case when ))这样的聚合又能产生哪些指标,这也值得你思考。
多表连接问题可能对于很多初学者来说很绕,但是多表连接问题真的不算什么难题。
最常用的多表连接场景,是用细粒度表连接粗粒度表,比如用订单表 left join 商品表。
那更复杂的场景,比如有一张表,
有user_id和group两个字段,让你把所有user和同一个group 内的其他user关联到一起,你该怎么做
在有些场景下,使用full outer join是可行的,有时候就不行,不行的时候,你可以考虑cross join之后再用where筛除多余数据,不同的做法效率也可能千差万别。
至于窗口函数,也是sql的重头戏,很多人最多用个sum() over()就认为自己会使用窗口函数。
窗函数最常用的写法是sum( a * (case when ) ) over(partition by order by rows between x preceding and current row)
如果给你一个更复杂的场景,需要把数据多次聚合,比如订单-》用户-活动-》用户,你能应付的过来么。
当你学sql学到一定深度,你就会发现你会频繁的遇到行列转换的问题,行转列有多少种方法?select+join是一种,group by + case when又是一种,列转行有多少种方法?select + union可以。
当你掌握了我上面说的那些之后,你应该重新梳理一下with语句,也就是cte,共用表语句,这个东西很有用,相当于临时表。
有了cte,加上我上面介绍的东西,你很容易用sql做漏斗分析,包括封闭漏斗和开放漏斗,至于用户分群分析,转化路径,用户生命周期这些,你尝试一下应该都不难。
然后非平衡面板数据的处理也是个问题,比如用户粒度的数据,但是在时间维度上有缺失,你如何对缺失值进行填补,在不填补的情况下你如何避免由此造成的问题?
如果再复杂一点,同样需要把数据多次聚合,还要求你回溯前7天,前14天,前30天,前60天的数据,你又该怎么做?
按照这种方式,然后多思考,多练习,多总结,这样才能真正的学好sql。
分享
热搜
相关推荐
-
之前嗤之以鼻,现在逐帧学习
静静爱影视 -
好家伙,一步一步教
五娃看剧 -
跟什么人学什么样
天线宝宝追影 3跟贴 -
高杆吸库 你学会了吗?
张雨爱剪辑 1跟贴 -
技巧展示,认真看,都是知识!
坊之影 1跟贴 -
“学会了吗”
徐帮阳 -
现场学习才能学到精髓
若尘剪辑 -
有人说这样练没用,其实你没有非常高的天赋,就乖乖跟着学吧!
隆科看生活 -
学会了,准备全文复诵
酱紫的娱圈 -
一岁的儿子学了一天就会,老娘用了一周还是半吊子,真心服口服
叨叨观视界 -
一学就会,一问就废
橘枳影视 -
学会了嘛
一一秋 -
我就说上网能学到真东西吧!
新住家居 -
提示和技巧,好用的方法
制造科技 -
提高效率的好工具,非常棒
太极本草 -
大神Karpathy:我给大模型「SQL注入」攻击,简直不要太轻松
机器之心Pro 1跟贴 -
带喜娜酱来哈尔滨,第一次吃到冰糖葫芦,在日本都没有卖的
玉酱日本生活 973跟贴 -
网友实拍雪乡大通铺 多张床一字排开中间用木板隔断
征垣之路 7020跟贴 -
俄罗斯商品馆商品来源引争议 多家门店已开始整改
环球网资讯 6939跟贴 -
后悔接手曼联?曝阿莫林更衣室沉默 再创8耻辱 英超时代最差开局
我爱英超 1553跟贴
热门跟贴