数据分析人员需要掌握sql到什么程度?
作者:卡卷网发布时间:2024-11-23 18:08浏览数量:107次评论数量:0次
能熟练用SQL进行统计分析,包括基本查询语句,聚合函数,连接,子查询,窗口函数等。
作为现互联网的数据打工人,接下来我从SQL必知必会和SQL学习方法两个方面来详细介绍~
注意:对于传统企业和一些小公司,数据量级并不太大,这时只要掌握Excel的函数、数据透视表等等就行了;而对于互联网企业和大公司,每天都能产生上亿的流量数据,这时SQL(主要是Hive SQL)就会派上用场。
SQL必知必会
1.基本的查询语句
能够编写基本的 SELECT 语句,包括选择特定列、过滤数据(Where)、排序结果(order by)等。
例如,我有一个顾客信息Customers表,需要取出其中在USA的用户id,姓名,并且按照年龄升序,可以得到如下SQL。
select customer_id,first_name,last_name
from Customers
where country = 'USA'
order by age asc
最后结果为
我们也可以用select * 选取所有列。
2.聚合函数
了解并能使用聚合函数如 SUM、COUNT、AVG、MAX、MIN 等,用于对数据进行统计和汇总
还是上面Customer表,我想取出这些人的最大年龄、最小年龄、平均年龄、年龄之和。SQL如下:
select max(age),min(age),avg(age),sum(age)
from Customers
最后结果为
3.GROUP BY 和 HAVING使用:
理解 GROUP BY 子句的作用,能够按照指定列对数据进行分组,并使用 HAVING 子句进行分组后的过滤。
例如,我想按照国家来分组,取出顾客年龄的最大值、最小值,可以得到如下SQL
select country,max(age),min(age)
from Customers
group by country
得到结果为
如果我想把各国最大客户年龄小于30的数据筛选出来呢,having就派上用场了
select country,max(age),min(age)
from Customers
group by country
having max(age)<30
得到结果如下
这里注意having和where虽然都是过滤数据,但having用于聚合后的过滤,where用于聚合前的过滤,所以不能写"where max(age)<30",会报错。
4.连接
熟悉不同类型的连接(内连接INNER JOIN、左连接LEFT JOIN、右连接RIGHT JOIN、全连接FULL JOIN),能够根据需要连接多个表进行数据处理。
下图所示为SQL各种连接示意。例如INNER JOIN是取两表的交集,LEFT JOIN就是取左表的所有数据,右表关联不上的就为空(RIGHT JOIN则是保留右表的数据);FULL OUTER JOIN是两表的数据都保留,关联不上的左右表都为空。
例如我们有用户订单表Orderlist,现在用Customers分别使用不同的连接方式与订单表Orderlist关联,关联键是customer_id。
-- 内连接
select c.customer_id, c.first_name, c.last_name, o.customer_id, o.item from
Customers as c
inner join
Orderlist as o
on c.customer_id = o.customer_id;
-- 左连接
select c.customer_id, c.first_name, c.last_name, o.customer_id, o.item from
Customers as c
left join
Orderlist as o
on c.customer_id = o.customer_id;
-- 右连接
select c.customer_id, c.first_name, c.last_name, o.customer_id, o.item from
Customers as c
right join
Orderlist as o
on c.customer_id = o.customer_id;
-- 全连接
select c.customer_id, c.first_name, c.last_name, o.customer_id, o.item from
Customers as c
full join
Orderlist as o
on c.customer_id = o.customer_id;
不同连接方式得到的结果如下:
内连接(保留两表的交集)
左连接(保留左表的数)
全连接和右连接大家可以思考看看结果会是怎样的~
5.子查询
掌握子查询的概念和用法,能够在查询中嵌套子查询以实现复杂的逻辑。
子查询是在 SQL 查询语句中嵌套在另一个查询语句内部的查询。子查询可以出现在 SELECT、FROM、WHERE 子句中,用于提供更复杂的查询逻辑和条件。子查询可以嵌套多层,以实现更复杂的查询需求。
比如我们想取出>平均年龄的顾客:
-- where后子查询
select first_name,last_name,age from Customers
where age > (select avg(age) from Customers)
得到以下结果
选出平均年龄最高的国家对应的顾客姓名
-- from 和 where 后接子查询
select first_name,last_name,age from Customers
where country in
(select country from
(select country,avg(age) from Customers
group by 1
order by avg(age) desc
limit 1)
)
6.窗口函数:
了解窗口函数(row_number, rank, dense_rank,sum over等)的概念,能够使用 OVER 子句结合窗口函数进行高级数据分析,如排名、累计求和等。
select first_name,last_name,age,country,
row_number() over(partition by country order by age desc) as rnk,
sum(age) over(partition by country order by age desc) as sum
from Customers
例如,我们用row_number得到分国家、年龄降序的排名,用sum over得到分国家、累计到排名的年龄和。
7.熟悉SQL执行顺序:
在 SQL 中,查询语句的执行顺序通常按照以下顺序进行:
FROM:指定要查询的表或视图。
WHERE:对 FROM 子句中的表进行筛选,返回符合条件的行。
GROUP BY:按照指定的列对结果进行分组。
HAVING:对 GROUP BY中的分组结果进行筛选。
SELECT:选择要返回的列。
DISTINCT:去除重复的行。
ORDER BY:对结果进行排序。
LIMIT/OFFSET:限制返回的行数和偏移量。
以上是数据分析最基本需要掌握的内容,增删改查、查询性能优化这些都是后端和数据仓库人员关注的,数据分析其实并不需要太关注。
SQL学习方法
学习在于实践,首先解决企业实际问题。
在企业中,掌握Hive SQL的基础内容是不够的,很可能出现一些自己完全没有用过的用法。
举几个例子,某一列的数据格式是例如['24','25','24','27']的字符串,但需要写sql统计每个数字出现的频次;
某一列的数据格式是一个{'coupon_id:[2210,2220,2210]',page_id:'2519'}这样的格式,我们须统计每个coupon_id对应的次数(尤其是在做流量转化漏斗时,部分数据直接从前端埋点上报,数据内容未解析);
前人留下来超过几百甚至上千行的取数逻辑自己看不懂……
遇到这样实际的问题,可以向大模型工具提问,减少了查阅资料和文档的时间,提升解决问题效率。
例如我们可以向GPT提问:“我有个hive表,对应的列名有user_id和coupon_id,该列的数据格式是例如['24','25','24','27']的字符串,现在希望统计对于每个user_id分组,具体coupon_id数字出现的频次,请帮我写一个Hive SQL”
这样我们可以快速解决问题~大模型还可以帮助我们解读SQL,给SQL debug,能有效提升数据分析师的工作效率。
如今大模型工具已经具备初级数据分析师的能力,未来的工作模式很可能演变为人使用大模型进行数据分析。对于数据分析师来说,紧跟时代前沿,了解大模型、有效利用大模型能提升自己的SQL学习和分析效率,增加自己的不可替代性。
越来越多的人来使用大模型技术提升效能。如果你想全面了解大模型技术,紧跟时代、走上AI快车道,提升工作学习效率和个人收入,推荐体验这门「知乎知学堂」联合「AGI课堂」官方发布的:AI大模型免费公开课。课程特邀业界专家为我们全面解读大模型技术,在两天的免费课程中,我们可以了解大模型发展历程与训练方法、利用LangChain+Fine-tune定制大模型应用等知识。
添加助教老师微信还可以领取免费大模型工具网址等资源,不要错过啦~
除了企业里的实践,也可以通过牛客网、力扣网等网站刷SQL题来实践。
比如求用户最长连续登陆天数、留存计算问题(新用户留存,活跃用户留存等等)
记住刷题的时候千万别只刷简单题,尤其对于想面互联网的朋友来说,至少得刷中等、困难题。因为企业里真实的查询就是更复杂,远远不是写一个select from就能解决的。
(曾经爬过有1000多行SQL的数据仓库底表。。。)
总而言之,多写多练,有不会的可以查教程或问大模型,才能充分熟练SQL这个工具。加油!
我是等壹,毕业于上海交大,多年机器学习研究,现某大厂码农一枚。
是技术和文艺的探索者,希望人生尽兴、有趣~
我会定期分享人工智能、大数据、职场、学习技巧等相关内容,欢迎关注!
以下是我的部分回答:
为什么我还是无法理解transformer?程序员,上班没事做该怎么办?机器学习需要哪些基础?免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。
相关推荐

你 发表评论:
欢迎