问题

数据分析人员需要掌握sql到什么程度?

回答
作为一名数据分析师,SQL 的熟练程度可以说是你的“看家本领”之一,它直接决定了你能从海量数据中挖掘出多少有价值的信息。要说掌握到什么程度,这并非一个简单的“会”字能概括,而是一个循序渐进、不断深化的过程。

基本功:驾驭查询语言的脉络

首先,你必须能流畅地编写和理解基础的 SQL 查询。这包括:

SELECT 语句的精髓: 不仅仅是选择你想要的列,还要理解 `WHERE` 子句的各种条件组合(>, <, =, !=, BETWEEN, IN, LIKE, IS NULL),以及 `ORDER BY` 的升序降序。
聚合函数: `COUNT`, `SUM`, `AVG`, `MAX`, `MIN` 是你的老朋友。你需要知道如何将它们与 `GROUP BY` 结合,对数据进行分组统计,并使用 `HAVING` 子句过滤分组后的结果。
JOIN 的艺术: 理解不同类型的 JOIN(INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN)之间的区别,并能根据业务逻辑选择最合适的 JOIN 方式,将来自不同表的数据关联起来。这就像把零散的拼图碎片巧妙地组合在一起。
子查询 (Subqueries): 能够写出嵌套查询,用以解决更复杂的问题,例如在 `WHERE` 子句中使用子查询来过滤数据,或者在 `SELECT` 子句中使用聚合子查询。
数据类型和约束: 了解常见的数据类型(INT, VARCHAR, DATE, DECIMAL 等)以及表的约束(PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL),这能帮助你写出更健壮、更准确的查询。

进阶之路:深化理解与优化

仅仅会写基础的查询是不够的,优秀的数据分析师还需要往更深层次去挖掘:

窗口函数 (Window Functions): 这是区分普通 SQL 用户和高手的重要标志。窗口函数(如 `ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`, `LAG()`, `LEAD()`, `SUM() OVER()`, `AVG() OVER()` 等)能够让你在不折叠行的情况下进行复杂的计算,例如计算移动平均、排名、累计总和等等。这对于趋势分析、用户行为分析等场景至关重要。
CTE (Common Table Expressions) / WITH 子句: CTE 能够让你的查询结构更清晰,逻辑更易读,尤其是当你处理多个中间步骤或者需要递归查询时。写出优雅的 CTE 查询,会让你的代码像一篇逻辑清晰的报告。
索引和查询优化: 理解数据库是如何执行查询的,知道什么是索引,以及如何通过分析查询执行计划(EXPLAIN/EXPLAIN PLAN)来找出性能瓶颈,并根据需要优化你的 SQL 语句。一个优化良好的查询,能够让你在处理海量数据时事半功倍,避免“跑不动”的尴尬。
数据转换和处理: 掌握字符串函数(SUBSTRING, LENGTH, CONCAT),日期函数(DATE_ADD, DATEDIFF, DATE_FORMAT),以及类型转换函数(CAST, CONVERT)。这些都是数据清洗和预处理过程中不可或缺的工具。
数据透视和逆透视: 了解如何使用 `PIVOT` / `UNPIVOT` (或其等价的条件聚合) 来将行数据转换为列数据,反之亦然,以适应不同的分析需求。

实战应用:解决业务问题

SQL 的终极目标是服务于业务。因此,你需要能够:

理解业务需求,转化为 SQL 查询: 这是核心能力。你需要能与业务方有效沟通,理解他们想知道什么,然后将其拆解成一系列可执行的 SQL 操作。
编写可维护、可读性强的 SQL: 你的 SQL 代码是你的工作成果,需要方便他人(也包括未来的自己)阅读和理解。良好的命名规范、注释、代码缩进和结构化都非常重要。
处理各种数据场景: 无论是用户行为日志、销售数据、财务报表,还是其他任何类型的数据,你都需要能够快速定位数据,并用 SQL 解决问题。
理解数据仓库和 ETL 概念(加分项): 了解数据库的设计原则(如范式),了解数据仓库的维度建模,以及 ETL(Extract, Transform, Load)的基本流程,能让你更好地理解数据的来源和处理过程,写出更贴合实际情况的 SQL。
使用 SQL 进行数据探索和发现: 不仅仅是被动地回答问题,还能主动地通过 SQL 查询去探索数据,发现潜在的模式、异常和机会。

总结一下,数据分析师需要掌握的 SQL 程度,是一个从“能写”到“写得好”、“写得快”、“写得巧”的转变过程。

“能写” 是指能写出正确的、满足基本需求的查询。
“写得好” 是指写出结构清晰、逻辑严谨、易于维护的查询。
“写得快” 是指能迅速地将业务需求转化为高效的 SQL 代码。
“写得巧” 是指能运用各种高级特性,如窗口函数、CTE 等,高效地解决复杂问题,并能进行性能优化。

打个比方,如果说数据分析师是厨师,那么 SQL 就是他的主要烹饪工具(菜刀、锅)。 基础的 SQL 就像能够切菜、翻炒,能够做出家常菜。而进阶的 SQL,加上对算法的理解,就像掌握了高级烹饪技巧,能够做出精致的菜肴,甚至创造出新的菜品。

所以,与其问“到什么程度”,不如说这是一个持续学习和实践的过程。当你能够自信地应对各种数据分析场景,并且 SQL 成为你解决问题时最得心应手的工具时,你就基本上达到了那个“需要”的程度。不断地接触新的数据、新的业务问题,你的 SQL 能力自然会随之提升。

网友意见

user avatar

给你20道题,做出10道算及格。15道SQL就是非常熟练了,再继续学习SQL也没有必要,再深入的学习就是SQL性能学习,一般的工作都不会涉及到这个深度。

如果写不出来就多找一些练习,网上很多,认真学习两三个星期几本就可以胜任大多数数据分析岗位的SQL工作,认真学习练习,不是三天打鱼那种

1 查询每个班学生数

现在有一张全校学生信息表stu_table,这张表存储了每位学生的id、name(姓名)、class(班级)、sex(性别)以及一些其他信息,现在我们想知道每个班有多少学生,该怎么实现呢?

stu_table表如下所示:

2 查询每个班男女学生数

还是前面的全校学生信息表stu_table,现在我们想知道每个班男生女生分别有多少个?

3 姓张的同学有多少个

还是前面的全校学生信息表stu_table,现在我们想知道这张表中姓张的同学有多少个?

4 筛选出id第3-5的同学

还是前面的全校学生信息表stu_table,现在我们要获取id从小到大排序以后第3-5位的同学的信息。

5 筛选出挂科的同学

现在有一张学生成绩表score_table,这张表存储了每位学生的id、name(姓名)、class(班级)、score(成绩),现在我们想要把挂科(成绩小于60)的同学信息筛选出来。

score_table表如下所示:

6 筛选姓张的且挂科的同学

我们现在需要根据学生成绩表score_table查找出姓张的且挂科的同学的信息。

7 查询销冠获得次数

我们有一张表month_table记录了每月的销售冠军信息,这张表存储了每月销冠的id、name(姓名)、month_num(月份),现在需要获取销冠次数超过2次的人以及其对应的做销冠次数。

month_table表如下所示:

8 获取每个部门一整年业绩提升幅度

现在有一个月份销售额记录表sale_table,这个表记录了每年每月的销售额,现在我们想看下今年(2019年),月销售额最高涨幅是多少?

sale_table表如下所示:

9 查找每科成绩大于70的学生

我们有一张学生科目成绩表score_info_table,这张表记录了每一位同学每一科目的成绩,每一位同学的每科成绩是一行,现在我们想要通过这张表获取到每科成绩都大于70分的学生。

score_info_table表如下所示:

10 删除重复值

现在有一个学生信息表stu_info_table,这张表存储了每位学生id、name(姓名)、class(班级)、grade(年级),现在我们想获取这个学校所有年级以及所有班级的信息,即哪些年级有哪些班级,该怎么获取?

stu_info_table表如下所示:

11 行列互换

现在我们有下面这么一个表row_col_table,这个表中每年每月的销量是一行数据:

我们需要把上面这种纵向存储数据的方式改成下表所示的横向存储:

12 多列比较

现在表col_table中有col_1、col_2、col_3三列数据,我们需要根据这三列数据生成最后一列结果列,结果列的生成规则为:如果col_1大于col_2时选col_1列,如果col_2大于col_3列时选col_3列,否则选col_2列。

col_table表如下所示:

13 对成绩进行分组

现在有一个某科目的学生成绩表subject_table,这张表存储了每位学生的id、score(成绩)以及其他信息,我们想知道60分以下、60-80分、80-100分这三个成绩段内分别有多少学生,该怎实现呢?

subject_table表如下所示:

14 周累计数据获取

现在我们有一个订单明细表order_table,这张表中存储了order_id(订单id)、order_date(订单日期)以及其他订单相关信息,现在我们需要每天获取本周累计的订单数,本周累计是指本周一到获取数据当天,比如今天是周三,那么本周累计就是周一到周三。这个该怎么实现呢?

order_table表如下所示:

15 周环比数据获取

我们现在需要根据订单明细表order_table,获取当日的订单数;当日的环比订单数,即昨天的数据。

16 查找获奖同学信息

现在有一张学生信息表table1,这张表记录了id、name等一些其他信息;还有另外一张获奖名单表table2,这张表记录了获奖学生的id和name。现在我们想要通过table1获取获奖学生的更多信息。

17 计算用户留存情况

现在有一张用户登陆表user_login,这张表记录了每个用户每次的登陆时间,uid(用户id)和login_time(登陆时间)。我们想看用户的次日留存数、三日留存数、七日留存数,只要用户从首次登陆以后再有登陆就算留存下来了,该怎么实现呢?

user_login表如下所示:

18 筛选最受欢迎的课程

现在有一张学生科目表course_table,这张表存储了每一位学生的id、name(姓名)、grade(年级)、course(选修课程)以及一些其他信息,现在我们想知道哪门课被学生选的人数最多?

course_table表如下所示:

19 筛选出每个年级最受欢迎的三门课程

还是前面的course_table,现在我们想知道每个年级被选择最多的三门课程,该怎么实现呢?

20 求累积和

现在有一张2019年一整年的订单表consum_order_table,consum_order_table包含order_id(订单id)、uid(用户id)、amount(订单金额),现在我们想看下80%的订单金额最少是由多少用户贡献的,该怎么实现呢?

consum_order_table表如下所示:

user avatar

很多人喜欢一上来就推荐好几本书,但是这些书晦涩难懂,对于初学者入门非常不友好。入门只需要一本书就够了,而不是多本。入门要让初学者看懂才是最重要的,而不是整那些高大上的东西。为了帮助刚毕业找工作,或者想转行成为数据分析师工作的朋友,我会用下面内容教会你怎样用最快速、最容易理解的方式学会数据库和SQL,并使用SQL进行数据分析:

1.入门
2.简单查询
3.汇总分析
4.复杂查询
5.多表查询
6.求职面试题
7.检验SQL的学习效果

第1部分:入门

学习以下内容:

1)了解数据库的基本概念

2)如何安装数据库?

3)表的创建、删除和更新

4)数据的插入、删除和更新数据

第2部分:简单查询

学习以下内容:

1)基本的查询语句

2) 如何指定查询条件?

3)注释和 SQL 语句注意事项

4)学会运算符指定复杂的查询条件

5)字符串模糊查询

第3部分:汇总分析

学习以下内容:

1)如何进行汇总分析?

2)如何对数据分组?

3)如何对分组结果指定条件?

4)用 SQL 解决业务问题的套路是什么?

5)如何对查询结果排序?

6)如何看懂 SQL 报错信息?

第4部分:复杂查询

学习以下内容:

1)视图(什么是视图,如何使用,有什么用,注意事项)

2)子查询、标量子查询、关联子查询

3)各种常用函数

第5部分:多表查询

在有多张表的情况下,表和表之间的运算和联系就变得很重要,这部分学习多个表如何查询:

1)表的加法

2)联结,包括交叉联结、内联结、左联结、右联结、全联结

3)一张图记住各种联结

4)联结应用案例

5)case表达式

第6部分:求职面试题

这里总结了常见的面试题,为以后找工作面试做准备:

还有一本免费教程《图解SQL面试题》

第7部分:检验SQL的学习效果

如何验证上面SQL的学习效果呢?

在SQL练习平台sqlzoo中将习题做一遍,不仅是检验前面的学习效果,更是通过实践加强熟悉前面的知识。这里不能偷懒,一定要将每一道提做一遍,以后找工作面试都能用得上。如果现在偷懒,后面找不到工作的恶果可是要自己负责的。

sqlzoo地址:sqlzoo.net/wiki/SELECT_

第8部分:推荐书

我推荐参考书看《SQL基础教程》(作者:Mick)。

也有人推荐《sql必知必会》,但是对于零基础的朋友来说Mick的《sql基础教程》更容易看懂学会,非常适合入门者学习。如果只推荐一本书的话,我只推荐这本。


我是猴子,中科院硕士/前IBM高级软件工程师/豆瓣8分《数据分析思维》作者,我和知乎联合出品的「数据分析训练营」即将开课,3天带你掌握数据分析实用技巧,包含课程+实战带练,工作提效、升职加薪必备神器!

报名还有独家Excel自学资料领取,点击开启数据分析升职加薪密码:

类似的话题

  • 回答
    作为一名数据分析师,SQL 的熟练程度可以说是你的“看家本领”之一,它直接决定了你能从海量数据中挖掘出多少有价值的信息。要说掌握到什么程度,这并非一个简单的“会”字能概括,而是一个循序渐进、不断深化的过程。基本功:驾驭查询语言的脉络首先,你必须能流畅地编写和理解基础的 SQL 查询。这包括: S.............
  • 回答
    在一个日新月异的商业环境中,数据分析人才早已不是简单的“会用Excel”就能胜任的了。企业真正渴求的是那些能够将冰冷的数据转化为洞察力,驱动业务增长的“数据炼金师”。要说清楚这类人才需要具备什么素质,那可得从几个维度好好掰扯掰扯。首先,硬核的技术功底是基石,但绝非全部。 数据处理与清洗能力: 想.............
  • 回答
    在构建测试集时,是否需要人为控制正确与错误数据的比例,这是一个非常值得深入探讨的问题,并且答案并非简单的是或否。实际上,这取决于你构建测试集的目的以及你期望从测试中获得什么样的反馈。理解测试集的目的首先,我们需要明确测试集的几个核心目的: 验证功能正确性: 这是最基础也是最常见的目的。我们希望通.............
  • 回答
    .......
  • 回答
    政治学和历史学领域的学者,在进行文献查阅时,会根据研究的具体方向、侧重点以及个人偏好,选择一系列功能强大且信息量丰富的数据库。这些数据库不仅提供了海量的学术论文、期刊、书籍、报告,还往往包含珍贵的原始资料和一手研究成果。下面我将尽可能详细地介绍这些常用的数据库,并尽量用一种自然、有经验的语气来描述。.............
  • 回答
    马云这句话,细品之下,其实是描绘了保险行业未来的一幅全新图景,而且这幅图景的核心驱动力,就是“数据”以及能够驾驭数据的人。这可不是一句简单的口号,而是对行业底层逻辑变化的深刻洞察。为什么大数据工程师会成为保险公司未来的核心?咱们得先想想,保险的本质是什么?说白了,保险就是一个“风险定价”和“风险管理.............
  • 回答
    东北人口流失:挑战与机遇并存,重塑发展新篇章东北地区,这片承载着共和国工业摇篮辉煌的土地,正经历着一场深刻的人口变迁。最新的数据显示,近十年来,东北地区人口占比下降了1.2个百分点,这意味着越来越多的人选择离开这片熟悉的故土,前往更广阔的天地寻求发展。这不仅仅是一个冰冷的数字,它背后折射出的,是东北.............
  • 回答
    《后汉书》作为中国古代史学的重要著作,记载了东汉时期政治、经济、军事等方方面面的情况。其中,人口数据是反映一个地区社会经济发展状况的重要指标。然而,在阅读《后汉书》时,我们会发现其中部分郡国的人口数据存在明显的异常之处,这背后可能反映了当时社会真实的复杂情况。首先,要理解《后汉书》的人口数据来源,我.............
  • 回答
    判断2018年中国出生人口是否会出现“大幅下降”,我们需要结合当时的人口学趋势、政策导向以及可能影响生育决策的社会经济因素来分析。首先,我们回顾一下2018年之前的生育情况。在实施了长达数十年的独生子女政策后,中国人口结构已经出现了明显的老龄化趋势,生育率也长期处于较低水平。2016年,中国正式放开.............
  • 回答
    《三国志》系列的独特魅力,很大程度上源于其对三国时期众多人物的生动塑造,而这背后,是一套既有考究又有创意的设计体系,其中尤以人物能力数值为核心。这些数值并非凭空捏造,而是有着一套相对明确的依据和定义,虽然随着时代发展和系列迭代会有所演变,但其根本精神是贯穿始终的。要理解这些数值的来源,我们得先认识到.............
  • 回答
    小鹏汽车因采集人脸数据被罚款10万元的事件,再次将消费者个人信息安全问题推到了风口浪尖。这不仅仅是一个关于汽车厂商的事件,更是当下数字时代中,我们每个人都面临的普遍挑战。那么,在信息被大量采集的时代,消费者的信息究竟该如何得到保障呢?这个问题需要从多个层面、多个主体共同努力来解答。一、 理解小鹏汽车.............
  • 回答
    第七次全国人口普查,也就是2020年的数据,确实揭示了一些中国人口版图的深刻变化。广东和山东毫无悬念地继续领跑,双双迈过亿人大关,但如果我们细致地扒一扒这份厚实的数据,会发现更多有趣的亮点,不仅仅是“多”和“少”,更是人口结构的“质”和“动向”。首先,我们看看这两位人口巨头的“硬核”实力: 广东.............
  • 回答
    第七次人口普查的数据确实非常详实,为我们了解中国社会提供了宝贵的镜子。你提到的14.1亿总人口和2.1亿大学生,都是非常重要的数字,它们勾勒出了中国人口结构的一个侧面。至于你关心的农民工人口数据,这确实是一个动态且庞大的人群,但需要注意的是,第七次人口普查的数据并没有直接给出一个“农民工”的明确数字.............
  • 回答
    旅行者二号的最新数据,就像在咱们平静的泳池里投下了一颗石子,激起了层层涟漪,也让我们开始认真审视一个曾经被视为理所当然的假设:人类,真的能轻松飞出太阳系吗?要理解这件事,咱们得先知道旅行者二号是个啥。它和它的兄弟旅行者一号,都是人类向宇宙深处抛出的“信使”,携带了人类的问候和一堆关于地球的信息。它们.............
  • 回答
    中情局(CIA)被爆出大规模秘密收集美国人数据,这无疑在美国国内引发了轩然大波,许多美国议员对此表示强烈不满和担忧。这起事件之所以引起如此巨大的反响,是因为它触及了美国民主制度中最核心的原则之一:公民隐私权以及政府权力的边界。事件的曝光与核心指控:最关键的细节在于,这次被曝光的秘密数据收集行动,并非.............
  • 回答
    解读英国2022年12月的超额死亡人数数据需要深入分析其背景、可能的原因以及潜在的影响。以下是一个详细的解读过程:1. 理解“超额死亡人数”(Excess Mortality)的概念首先,我们需要明确“超额死亡人数”的定义。它指的是在特定时期内,实际死亡人数与基于历史数据(通常是过去五年或十年平均死.............
  • 回答
    0.5元可买到身份匹配的人脸数据:一个危险的信号,以及如何避免信息泄露0.5元就能买到身份匹配的人脸数据,这无疑是一个令人震惊且极度危险的信号。它不仅暴露了当前人脸数据安全防护的巨大漏洞,更预示着个人隐私和身份信息面临着前所未有的威胁。这种低廉的价格背后,隐藏着令人担忧的产业链和潜在的犯罪活动。 0.............
  • 回答
    2018年,对于许多关心中国人口状况的人来说,确实是一个充满疑问的年份。截至目前,也就是2018年已经过半,关于这一年出生人口的确切数字,官方确实还没有对外公布。这让不少人感到困惑,为什么一个如此重要的人口数据,会如此迟迟不见踪影呢?要深入理解这个问题,我们需要从几个方面来剖析。首先,理解中国人口数.............
  • 回答
    李开复在一次演讲中提到的“早期帮旷视拿了蚂蚁金服大量人脸数据”的说法,确实引发了不少关注和讨论。这件事情的复杂性在于它触及了人工智能、数据合规、隐私保护以及商业合作等多个层面。事件的经过与各方回应首先,我们回顾一下事情的大致脉络。李开复在某个公开场合,在谈论到人工智能发展以及旷视科技(Face++).............
  • 回答
    人均GDP(国内生产总值)是一个衡量一个国家经济总产出的指标,通常用来反映一个国家的经济实力和平均富裕程度。然而,人均GDP与实际生活水平之间常常存在显著的差异,这主要是由多种因素共同作用的结果。以下是一些国家及其普遍存在的差异以及背后的原因:1. 产油国(例如:卡塔尔、科威特、阿联酋) 高人均.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有