最新消息:你还可以选择关注微信公众号:CoreMarketXin 硬核马克,似乎这样你就多了一个可以黏住我的渠道😘

提升职场竞争力,运营必须要会SQL

必备技能 硬核马克 84浏览 0评论

关注我的公众号:CoreMarketXin 硬核马克🤓

记得在很早的时候,一个在大厂运营朋友跟我说,他们正在全员学SQL。不过等到我后来进入大厂,依然发现没多少人掌握了SQL。当然这跟团队也有关系,我呆过服务、业务运营团队,以及产品团队,从比例上来说,运营团队的SQL掌握率远低于产品团队。但是从业务本身来说,会SQL对于业务的影响和帮助远大于对产品本身的帮助。

我这里简单梳理一些基础的SQL语法,主要是分享,让更多的运营小伙伴认识SQL。以下是以我业务视角,业务语言,对业务同学的输出,从专业性上肯定不及数据同学的解释,但是更多会关注业务同学需要关注的场景。针对一些复杂的场景,欢迎一起提升学习。

认识SQL:

提到SQL,我们紧接着蹦出口的下一句便是“增删查改”,其实对于运营来说,一般只用到“查”这一个基础场景。对于数据表的增、删、改是BI或者数据科学的同事在做的工作。

要认识SQL,我们先要知道数据在哪里,再讨论怎么查。

比如我们要查询商城的用户id明细,先需要知道这个“id”的字段存储在哪里。一般会有一张业务层的表,我习惯称之为“底表”,即这张表存储了很多的相关字段,比如有id,注册时间,用户昵称等等。

这张表一般需要去公司的数据地图查询(不同公司称呼不同,可以问下数据同事),先找到这张表,申请查询权限,注意查询权限可能不包含部分敏感字段的权限,需要单独申请。

我们就拿上面的实例简单展开:

表的格式一般为:

字段存储的基本逻辑为:

假如我们命名这张表的名称:user_info_1

以上大致能让我们了解到了从哪里可以找到这个字段的问题。接下来我们要讨论,怎么把这个数取出来。

结构:

基础查询:

查询数据的语法结构,至少从我目前的实际工作情况来说,就一种结构。不过根据语言不同稍有不同(比如presto和MySQL)。大体上是一致的。

比如我们要查询上述表中的基础信息,我们可以使用下列方式查询:

select
  uid
  ,uname
  ,registration_date
from user_info_1
where pt='20250105'

最终输出的结果即为在表user_info_1中,最新分区“20250105”存储的所有用户的三个字段的信息。

如果我们要找固定的一个用户他的基础信息,那么可以设定其中的uid条件,如下:

select
  uid
  ,uname
  ,registration_date
from user_info_1
where pt='20250105'
and uid=01

最终输出的就是uid为01的用户的基础信息。

我们在分析业务数据的时候,根据明细,结合Excel的一些统计工具,可以快速找到数据并得出一些初步的业务结论。

关联查询

有了上面基础查询的基础,实际工作中还会经常遇到多表关联:不同的字段在不同的表中,需要关联多表来输出一份完整数据。当然也可以分别查询之后,通过Excel中VLOOKUP工具进行统计,不过这个很麻烦,不如一步到位:相当于我们在sql中直接使用了VLOOKUP函数。

如何进行多表关联?我们先认识一下多表关联需要用到的一个新语法:inner join(内关联),left join(左关联),right join(右关联)。在实际工作中,没用到过inner join。而判断使用left 还是right 关联,首先需要判断最终输出的表的核心字段是左表还是右表。

比如上面有一张用户基础表:user_info_1,我们再找一张用户访问表,命名为:user_info_2,如下:

我们要最终输出一份包含用户基础信息以及近30天访问PV的数据,那么就可以这么写:

select
  a.uid
  ,a.uname
  ,a.registration_date
  ,b.recent_30d_visit_pv
from
  user_info_1 a
  left join user_info_2 b
on cast(a.uid as varchar)=b.uid
where pt='20250105'

最终输出的就是包含用户基础信息以及近30天访问PV的数据表。同上,如果要查询用户01的数据,叠加一个and的筛选条件即可。

这里的关键点是:

  • 两张表需要有一个相同的意义的字段,如上的例子中就是uid,通过uid来关联两张表。
  • 不同的表在最后需要加上字符区分,我这里用了“a”,“b”,当然也可以用其他的,只要能区分开就可以
  • 在不同的表中的字段,要与表末带的字符一致,都需要加上对应的字符,如“a.uid”,“b.recent_30d_visit_pv”

特殊语法:

除了上述的几个基础查询语句,在实际工作中还有几个比较实用的语法。能帮助运营提升查询效率。

sum:聚合函数。用于计算某一字段的和。这个可以直接类比Excel中的sum函数。

例:最终输出的结果就是订单数量之和。

select sum(orders)
from user_info_2
where pt='20250105'

count:计数函数。用于统计某个字段的非空的数量。

distinct:去重,返回的是去重的字段明细。

上述两个函数一般来说会结合起来用,例:最终输出的是平台去重的用户数量:

select count(distinct uid)
from user_info_1
where pt='20250105'

时间取值:通过限制时间或者时间周期,来看某一(段)时间内的数值表现情况。

例:最终输出的就是这个时间(段)内的数据情况。

select
  uid
  ,order_created_time
  ,orders
from user_info_2
where pt='20250105'
AND substr(CAST(a.gmt_created_time AS VARCHAR),1,7) = '2024-06'
--AND substr(CAST(a.gmt_created_time AS VARCHAR),1,10) >= '2024-06-28' and substr(CAST(a.gmt_created_time AS VARCHAR),1,10) <= '2024-07-04'
--AND substr(CAST(a.gmt_created_time AS VARCHAR),1,7) >= '2024-01' and substr(CAST(a.gmt_created_time AS VARCHAR),1,7) <= '2024-07'

顺便提一下,字段前“–”表示不运行该语句。方便我们快速定位语法问题,或者添加备注。当然有的也写作“/*”表达的意思是一致的。

另外两个也经常用,但是就不举例了,大家可以自己手动尝试下。

group by:用于将数据按指定的字段分组,通常与聚合函数一起使用。

limit:限制查询结果的数量。

注意点:

这里还有一个需要注意的小知识点,当使用关联函数join或者条件函数(and,where)的时候,我们需要关注这个字段的字符类型:varchar(string) 字符型,需要加单引号,bigint数值型/整型,不要加引号。

例如上面这个例子:

select
  uid
  ,uname
  ,registration_date
from user_info_1
where pt='20250105'
and uid=01

uid属于数值型(BIGINT),pt就属于字符型(STRING),所以在书写上有所不同。

另一个是当使用关联函数,用a表的字段去映射b表的时候,如果a表的字符是BIGINT,需要先将BIGINT通过cast函数转化为STRING,如下:

on cast(a.uid as varchar)=b.uid

结语

sql要深入很难,我在实际工作中也是用到了一些基础的语法,但是这些语法帮助我大大提升了效率,缓和了与数据同事的职场关系(至少是省了大把的提交、等待数据需求的时间,以及帮数据同学减少了大把查询数据的时间。)

另外,学习sql还需要掌握这几点:

1.刻意练习,不断重复使用,提升熟练度

2.保持好奇心,不断学习新的语法

3.厚脸皮,总有遇到不会的,要多问,并且不懂就问

4.最后还推荐大家一个工具:kimi,实在找不到人问问题的情况下,可以问问AI。

转载请注明:硬核马克 » 提升职场竞争力,运营必须要会SQL

您必须 登录 才能发表评论!