c

codeye

V1

2022/10/17阅读:22主题:默认主题

33个必须知道的数据分析师SQL面试问题和答案

33个必须知道的数据分析师SQL面试问题和答案

SQL是一种强大的编程语言,被广泛用于管理和分析数据。如果你想成为一名数据分析师,或者是正在寻找新工作的现有分析师,准备好回答SQL面试问题是很重要的。

下面是一些最常见的SQL面试问题,在我们的数据分析师SQL面试中,你可能会被问到这些问题,以及如何回答的建议。

  1. 什么是SQL,其主要特点是什么?

SQL,即结构化查询语言,是一种用于访问和操作数据库的标准编程语言。SQL以其简单而强大的语法而闻名,这使得它可以很容易地以各种方式查询数据。SQL还支持广泛的数据类型,包括数字、文本和日期/时间值。

  1. 有哪些最常见的SQL命令?

一些最常见的SQL命令是CREATE TABLE, INSERT INTO, UPDATE, DELETE, 和SELECT

CREATE TABLE是用来在数据库中创建一个新的表。

INSERT INTO用于向一个表插入数据。

UPDATE用于更新表中的数据。

DELETE用于从一个表中删除数据。

SELECT用于从表中选择数据。

想练习真正的SQL面试问题吗?

我们在Big Tech Interviews (BTI)分析了从上市前到财富500强公司的50,000多次面试,策划了一个最新的SQL面试问题和解决方案的独家列表,这样你就可以在下一次面试中取得胜利

  1. 如何使用SQL来分析数据?

SQL提供了许多内置函数,可用于执行各种类型的数据分析。例如,COUNT函数可以用来计算一个表中的记录数,而SUM函数可以用来计算一个列中数值的总和。通过使用这些和其他SQL函数,数据分析员可以快速和容易地执行复杂的数据分析任务。

例如,一个数据分析员可能会使用SQL来计算每天在一个网站上的订单数量。下面的SQL查询将返回数据集中每天的订单总数。

SELECT COUNT(*) AS "Total Orders" #(订单总数)

FROM orders  #订单

GROUP BY order_date
  1. 在编写SQL查询时,有哪些常见的错误?

编写SQL查询时发生的一个常见错误是忘记了包括WHERE子句。如果没有WHERE子句,你的查询将返回你所查询的表的所有记录,这可能会使你很难找到你所寻找的具体信息。另一个常见的错误是使用不正确的语法,这可能导致你的查询在执行时出现意外的结果或错误。最后,重要的是要确保你的SQL查询格式正确,易于阅读;否则,如果出现问题,其他人可能很难理解或调试。

例如,下面的SQL查询将返回订单表中的所有记录,无论订单日期如何。

SELECT *

FROM orders

这将返回一个非常大的数据集,难以处理。为了解决这个问题,我们可以添加一个WHERE子句,按订单日期过滤数据。

SELECT *

FROM orders

WHERE order_date = '2018-01-01' 。
  1. 主键和外键之间有什么区别?

一个主键是数据库表中的一个列(或一组列),它能唯一地识别表中的每一行。外键是一个表中的一个列(或一组列),它包含与另一个表中的主键值相匹配的值。外键用于创建表之间的关系;例如,"客户 "表中的外键可以引用 "订单 "表中的主键,将每个客户与他们各自的订单联系起来。

  1. 什么是SQL连接,它是如何使用的?

SQL连接是用来将两个或多个表的数据合并成一个结果集的。连接是使用JOIN关键字进行的,后面是要连接的表的名称。有许多不同类型的连接,包括内连接、外连接和自连接。

内连接从两个表中返回在指定列中有匹配值的记录,而外连接从两个表中返回所有记录,包括没有匹配值的记录。自连接用于将一个表连接到它自己;例如,你可以使用自连接来找到与另一个客户住在同一个城市的所有客户。

  1. 什么是子查询,它是如何使用的?

子查询是一个嵌入在另一个SQL查询中的SQL查询。子查询通常用于查找满足某些条件的数据;例如,你可以使用子查询来查找与某一特定客户居住在同一城市的所有客户。子查询可以与各种SQL命令一起使用,包括SELECT, FROM, WHERE, 和ORDER BY

例如,考虑下面这个客户表。 假设我们想找到与id=1的客户住在同一个城市的所有客户。我们可以使用下面的SQL查询。

SELECT * FROM customers WHERE city IN (SELECT city FROM customers WHERE id = 1)

这将返回客户表中的所有行,包括id=1的行。为了排除这条记录,我们可以在子查询中添加一个条件,检查customer_id !=1。


SELECT * FROM customers WHERE city IN (SELECT city FROM customers WHERE id = 1 AND id != 1)
  1. 什么是SQL窗口函数,它是如何使用的?

一个SQL窗口函数是一个对一组数值进行计算并返回一个单一数值的函数。与聚合函数不同的是,窗口函数每组返回一个结果,每行返回一个结果。常见的窗口函数包括RANK, DENSE_RANK, 和NTILE

窗口函数经常与ORDER BY子句一起使用,为每一行计算一个值。

  1. 什么是一些最重要的SQL数据类型?

SQL支持许多不同的数据类型,包括数字、文本、日期/时间和布尔值。数字值包括整数和浮点数,而文本值包括字符串,日期/时间值包括日期、时间和时间戳值。布尔值可以是TRUE或FALSE。

  1. 什么是索引,它是如何使用的?

索引是一种数据库结构,用于提高SQL查询的性能。索引可以在表中的列上创建,它们通常被用来加快对这些列中特定值的搜索。当一个查询被执行时,数据库引擎将首先检查被搜索的列是否存在索引;如果存在索引,引擎将使用索引来快速定位所需的数据,这可以提高查询性能。

  1. 视图和表之间有什么区别?

视图是一个基于SQL查询结果的虚拟表。视图通常被用来提供安全性或简化复杂的查询。例如,你可以创建一个视图,只包括与你当前项目相关的客户信息。另一方面,表则是实际存储数据的数据库结构。

  1. WHERE子句和HAVING子句的区别是什么?

WHERE子句用于根据指定的条件从表中过滤行;例如,你可以使用WHERE子句来寻找所有居住在某一城市的客户。HAVING子句用于根据聚合值从表中过滤行;例如,你可以使用HAVING子句来查找所有下过10个以上订单的客户。

  1. ORDER BY关键字的作用是什么?

ORDER BY关键字用于将SQL查询的结果按升序或降序排序。默认情况下,ORDER BY将对结果进行升序排序;要对结果进行降序排序,可以使用DESC关键字。

  1. 什么是主键? 主键是一个列或一组列,用于唯一地识别表中的一行。主键必须包含唯一的值,而且不能是空的。

  2. 什么是外键? 外键是一个列或一组列,包含与另一个表中的主键值相匹配的值。外键用于创建表之间的关系;例如,"客户 "表中的外键可以引用 "订单 "表中的主键,将每个客户与他们各自的订单联系起来。

  3. 窗口函数是如何工作的?

窗口函数是一种SQL函数,对一组行进行操作并返回一个单一的值。窗口函数通常用于计算汇总值,如总和或平均数,在一个指定的窗口行上计算。例如,你可以使用一个窗口函数来计算每个客户的平均订单总额。

  1. 内联和外联的区别是什么?

内联只返回在两个表中都有匹配值的行;例如,如果你将 "客户"表和 "订单"表进行内联,将只返回已下订单的客户。另一方面,外连接会返回两个表中的所有行,包括没有匹配值的行。

  1. 一些最常见的SQL函数是什么?

一些最常见的SQL函数是SUM(), AVG(), COUNT(), MIN(), MAX()。这些函数用于计算聚合值,如总和、平均数或计数。

  1. 你是如何使用SQL来解决一个问题的?

这是一个常见的SQL面试问题,目的是评估你在现实世界中使用该语言的经验。在回答这个问题时,一定要描述一个你能用SQL解决的具体问题。这将有助于向面试官表明,你对SQL在实践中的使用有很好的理解。

  1. 在SQL中,滞后和领先函数的区别是什么?

滞后和领先函数是用来访问表中前一行或后一行的数据的。滞后函数从当前行之前的行中返回数据,而领先函数从当前行之后的行中返回数据。

比如说。

如果当前行是customer_id 3 (Joe Bloggs),滞后函数将返回customer_id 2 (Jane Doe),而引导函数将返回customer_id 4 (Sarah Connor)。

  1. 写一个SQL查询,选择工程部门中第二高的工资。

SELECT DISTINCT salary

FROM  employee #雇员

WHERE department = 'engineering' #(工程部)

ORDER BY salary DESC LIMIT 1 OFFSET 1

这个SQL查询将从工程部选择第二高的工资,首先选择工程部员工的所有不同的工资,然后按降序排序,最后选择前两个工资。

  1. 什么是相关的子查询?

相关子查询是一种SQL查询,它包含对外部查询的一个值的引用。当你想从一个表中找到符合某些条件的行时,通常会使用相关子查询,但你只能在检查同一表中的其他行后才能知道这些条件。

例如,你可以使用相关子查询来找到所有赚取超过其部门平均工资的员工。在这种情况下,你需要先计算出每个部门的平均工资,然后再将每个员工的工资与之进行比较。

  1. 什么是SQL聚合函数,它是如何使用的?

一个SQL聚合函数是一个对一组数值进行计算并返回一个单一数值的函数。常见的聚合函数包括COUNT, SUM, MAX, 和MIN。聚合函数通常与GROUP BY子句一起使用,以便为每个组返回一个结果;例如,你可以使用COUNT()函数来查找每个城市的客户数量。

例如,考虑下面这个客户表。

假设我们想找到每个城市的客户数量。我们可以使用下面的SQL查询。

SELECT city, COUNT(*) AS "Number of Customers"

FROM Customers

GROUP BY city

这将返回以下结果。

  1. 什么时候你不想在SQL中使用窗口函数?

窗口函数是一种SQL函数,它根据同一结果中其他行的值,为查询结果中的每一行返回一个值。例如,你可以使用一个窗口函数来计算客户订单表中所有订单总数的流水。

窗口函数通常不与聚合函数一起使用,因为其结果是没有意义的。例如,如果你试图用窗口函数找出每个部门的平均工资,你最终会得到每个部门相同的平均工资,因为窗口函数会计算结果集中每一行的平均工资(也就是所有部门的所有员工)。

  1. 如何在一个SQL表中找到重复的行?

有几种方法可以在SQL表中找到重复的行。一种方法是使用GROUP BY子句将在你感兴趣的列中具有相同值的记录分组。例如,假设我们有一个客户订单表,其数据如下。

如果我们想找到所有重复的行,我们可以使用下面的SQL查询。

SELECT name, city

FROM customer_orders

GROUP BY name, city

HAVING COUNT(*) > 1

这将返回以下结果。

  1. 如何优化一个SQL查询?

有几种不同的方法来优化一个SQL查询。一种方法是确保你感兴趣的列是有索引的,所以数据库可以更快找到你要找的数据。

另一种方法是使用EXPLAIN命令来查看数据库将如何执行你的查询,然后根据这些信息对你的查询进行修改。最后,你可以使用查询提示来给出数据库特定的指令,说明如何执行你的查询。

另一种优化SQL查询的方法是使用像SQL Profiler这样的工具来查看查询中的瓶颈所在,然后做出相应的修改。

  1. 如何找到按销售额计算的前5名客户? 有几种不同的方法可以找到销售额前5%的客户。一种方法是使用GROUP BY子句,将在你感兴趣的列中具有相同值的行分组。例如,假设我们有一个客户订单表,数据如下。

如果我们想按销售额找到前5名客户,我们可以使用以下SQL查询。


SELECT name, city, SUM(sales) AS "Total Sales" (总销售额)。

FROM customer_orders

GROUP BY name, city

ORDER BY "Total Sales" DESC

LIMIT 5

这将返回以下结果。

  1. 什么是关系型数据库?

关系型数据库是一种将数据存储在表中的数据库。表类似于文件系统中的文件夹,每张表都存储着关于一个特定主题的数据。例如,客户订单表可能存储有关客户订单的数据,而产品表可能存储有关产品的数据。

关系型数据库是最常见的数据库类型,它们被大多数企业使用,因为它们易于使用,易于扩展。

  1. 数据库有哪些类型的关系?

数据库中有三种类型的关系:一对一,一对多和多对多。

一对一关系是指一个表中的每条记录只与另一个表中的一条记录相关。例如,一个客户表可能与一个订单表有一对一的关系,每个客户只与一个订单有关。

一对多的关系是指一个表中的每条记录与另一个表中的多条记录有关。例如,一个客户表可能与一个订单表有一对多的关系,每个客户与多个订单有关。

多对多的关系是指一个表中的每条记录与另一个表中的多条记录相关,而另一个表中的每条记录与第一个表中的多条记录相关。例如,一个客户表可能与一个产品表有多对多的关系,其中每个客户与多个产品相关,每个产品与多个客户相关。

  1. 什么是DDL和DML?

DDL(数据定义语言)是一种用于创建和修改数据库结构的语言,如表、视图和索引。

  1. 编写一个查询,以获得按日计算的两天滚动平均销售总额。 例如,假设我们有一个销售表,其数据如下。

如果我们想得到按日计算的两天滚动平均数,我们可以使用下面的SQL查询。

SELECT date, sales, AVG(sales) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS “Two-Day Rolling Average”
#"两天滚动平均数": Two-Day Rolling Average

FROM sales

GROUP BY date

ORDER BY date
#按日期排序

这将返回以下结果。

  1. 你将如何向一个初学者教授SQL?

如果你向一个初学者教授SQL,你会从解释数据库的基础知识开始,以及它们是如何用来存储数据的。

然后,你会继续解释不同类型的SQL查询,以及它们是如何被用来从数据库中检索数据的。最后,你会教他们如何使用SQL来插入、更新和删除数据库中的数据。

  1. 在SQL中,有哪些常见的日期函数?

在SQL中一些常见的日期函数是。

  • CURRENT_DATE:返回当前日期。

  • current_tim:返回当前的时间。

  • current_timestamp:返回当前的日期和时间。

  • DATE_ADD: 将指定的天数、月数或年数加到一个日期上。

  • DATE_SUB:从一个日期中减去指定的天数、月数或年数。

  • DAY:返回一个日期的月日。返回一个给定日期的月份的日期。

  • MONTH:返回给定日期的月份。

  • YEAR:返回给定日期的年份。返回给定日期的年份。

  1. 哪些是高级SQL函数?

有许多高级SQL函数,但其中最常见的是聚合函数、窗口函数和透视。

聚合函数是用来从多个数值中计算一个单一的数值。例如,SUM()函数计算一列数值的总和,AVG()函数计算一列数值的平均值。

窗口函数用于根据表中其他行的值为每一行计算出一个值。例如,RANK()函数给表中的每一行分配一个等级,LAG()函数返回前一行中某一列的值。

透视是指你将数据从一种格式旋转到另一种格式。例如,你可以将数据从水平格式旋转到垂直格式,或者从列式格式旋转到基于行的格式。

用这33个数据分析师的SQL问题搞定你的数据分析师面试 你的数据分析师SQL面试将明确和隐含地测试你的这些概念。仅仅知道在数据分析师面试中出现的SQL查询是不够的;你需要了解这个主题如何融入数据分析以及它对你即将到来的同事的影响。首先,对这些概念和查询的背景和功能感到满意。然后你就可以进入下一步:练习解决问题。

分类:

后端

标签:

后端

作者介绍

c
codeye
V1