SQL有很多非常强大的功能,但是在数据科学的面试中,大多数公司只会问你少数几个核心概念。下文中的10个概念是面试中最常出现并且在现实生活中的应用最多的。
在本文中,我将给大家带来我认为的10个最重要SQL概念。如果你正在准备数据科学面试时,你可以集中时间在理解这些概念上。
你可能会看到很多需要使用CASE WHEN语句的问题,这只是因为它是一个多功能的概念。
如果要根据其他变量分配某个值或类,则可以使用它编写复杂的条件语句。
很多人不知道的是,该语句还允许我们透视数据。例如,如果你有一个 month 列,并且希望为每个月创建一个单独的列,则可以使用CASE WHEN语句来透视数据。
示例问题:编写一个SQL查询来重新格式化表,以便每个月都有一个revenue列。
Initial table:
+------+---------+-------+
| id | revenue | month |
+------+---------+-------+
| 1 | 8000 | Jan |
| 2 | 9000 | Jan |
| 3 | 10000 | Feb |
| 1 | 7000 | Feb |
| 1 | 6000 | Mar |
+------+---------+-------+
Result table:
+------+-------------+-------------+-------------+-----+-----------+
| id | Jan_Revenue | Feb_Revenue | Mar_Revenue | ... | Dec_Revenue |
+------+-------------+-------------+-------------+-----+-----------+
| 1 | 8000 | 7000 | 6000 | ... | null |
| 2 | 9000 | null | null | ... | null |
| 3 | null | 10000 | null | ... | null |
+------+-------------+-------------+-------------+-----+-----------+
SELECT DISTINCT 是你一定要时刻牢记的东西,最常见的用法是将 SELECT DISTINCT 语句与聚合函数进行结合。
例如,如果我们有一个显示客户订单的表,则可能会要求我们计算每个客户的平均订单数。在这种情况下,我们希望将订单总数计入客户总数中。如下所示:
SELECT
COUNT(order_id) / COUNT(DISTINCT customer_id) as orders_per_cust
FROM
customer_orders
在这里可以和上面的第2点相结合,你需要对聚合函数有很强的理解,比如 min,max,sum,count 等等…这也意味着你应该对 groupby 和 HAVING 子句有很好的理解。我强烈建议你花点时间来解决实践问题,因为有一些创造性的方法可以使用聚合函数。
示例问题:编写一个SQL查询,在名为 Person 的表中查找所有重复的电子邮件。
+----+---------+
| Id | Email |
+----+---------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
+----+---------+
ANSWER:
SELECT
Email
FROM
Person
GROUP BY
Email
HAVING
count(Email) > 1
对于那些对 SQL 比较陌生或有一段时间没有使用过 SQL 的人来说,很容易混淆左连接和内部连接,我们必须清楚地理解每个连接如何获得不同的结果。在许多面试问题中,你都会被要求做一些连接,在某些情况下,选择左或者右,都关系到正确和错误的答案。
SQL一般会通过自联接将表与自身进行联接,你可能会认为这没用,但是很快你就会为之感到惊讶。在许多实际设置中,数据存储在一个大表中,而不是许多小表中。在这种情况下,可能需要自连接来解决独特的问题。
让我们看一个例子。
示例问题:下面是一个给定的 Employee 表,需要编写一个SQL查询,找出收入高于经理的员工。在该表中,Joe是唯一一个收入高于经理的员工。
+----+-------+--------+-----------+
| Id | Name | Salary | ManagerId |
+----+-------+--------+-----------+
| 1 | Joe | 70000 | 3 |
| 2 | Henry | 80000 | 4 |
| 3 | Sam | 60000 | NULL |
| 4 | Max | 90000 | NULL |
+----+-------+--------+-----------+
Answer:
SELECT
a.Name as Employee
FROM
Employee as a
JOIN Employee as b on a.ManagerID = b.Id
WHERE a.Salary > b.Salary
子查询,也称为内部查询或嵌套查询,是查询中的查询,并且嵌入在WHERE子句中。 这是解决需要按顺序进行多个查询才能产生给定结果的独特问题的好方法。子查询和 WITH AS 语句在查询时都非常有用,因此你一定要知道如何使用它们。
示例问题:假设一个网站包含两个表,Customers 表和 Orders 表。 编写SQL查询,用来查找所有从不订购任何商品的客户。
Table: Customers.
+----+-------+
| Id | Name |
+----+-------+
| 1 | Joe |
| 2 | Henry |
| 3 | Sam |
| 4 | Max |
+----+-------+
Table: Orders.
+----+------------+
| Id | CustomerId |
+----+------------+
| 1 | 3 |
| 2 | 1 |
+----+------------+
Answer:
SELECT
Name as Customers
FROM
Customers
WHERE
Id NOT IN (
SELECT
CustomerId
FROM Orders
)
字符串函数非常重要,尤其是在处理不干净的数据时。 因此,很多公司在面试时可能会在字符串格式和操作方面对你进行测试,来检测你是否知道如何操作数据。
字符串格式包括以下内容:
在日常工作中,你肯定遇到过涉及日期和时间数据的SQL问题。例如,让你按照月份对数据进行分组,或者将变量格式从DD-MM-YYYY转换为简单的月份。
以下为应该知道的函数:
示例问题:给定一个天气表,编写一个SQL查询来查找与之前(昨天)日期相比温度更高的所有日期的id。
+---------+------------------+------------------+
| Id(INT) | RecordDate(DATE) | Temperature(INT) |
+---------+------------------+------------------+
| 1 | 2015-01-01 | 10 |
| 2 | 2015-01-02 | 25 |
| 3 | 2015-01-03 | 20 |
| 4 | 2015-01-04 | 30 |
+---------+------------------+------------------+
Answer:
SELECT
a.Id
FROM
Weather a,
Weather b
WHERE
a.Temperature > b.Temperature
AND DATEDIFF(a.RecordDate, b.RecordDate) = 1
Window函数允许我们对所有行执行聚合值,而不是只返回一行(groupby语句就是这样做的)。在我们要对行进行排序、计算累计和等等操作时,Window函数会非常有用。
示例问题:编写一个 SQL 查询用于获取薪水最高的 empno,以便确保方案可以处理其中的关系!
depname | empno | salary |
-----------+-------+--------+
develop | 11 | 5200 |
develop | 7 | 4200 |
develop | 9 | 4500 |
develop | 8 | 6000 |
develop | 10 | 5200 |
personnel | 5 | 3500 |
personnel | 2 | 3900 |
sales | 3 | 4800 |
sales | 1 | 5000 |
sales | 4 | 4800 |
Answer:
WITH sal_rank AS
(SELECT
empno,
RANK() OVER(ORDER BY salary DESC) rnk
FROM
salaries)
SELECT
empno
FROM
sal_rank
WHERE
rnk = 1;
UNION 不经常出现,但偶尔还是会有人问你这个问题,一般情况下,我们了解这个功能也是是很好的。如果你有两个具有相同列的表,并且想把它们组合在一起,这时就可以用 UNION 了。
PS.如果你不能百分之百确定UNION的工作原理,记得找相关的教程来学习。
--END--
希望以上内容对你的求职面试有所帮助,如果你从内而外地了解这10个概念,那么在面对大多数SQL问题时,都能做得很好。
参考链接:https://towardsdatascience.com/ten-sql-concepts-you-should-know-for-data-science-interviews-7acf3e428185
喜欢本文的同学记得转发+点赞~