面试sql基础知识(想通过数据科学面试)
全文共4028字,预计学习时长11分钟
图源:samsar
SQ是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,其功能非常强大,是数据科学面试中绕不过的考点。
很多人为了通过面试事无巨细地准备,犄角旮旯都不敢放过。但事实上,在现实面试中大多数公司只测试其少数核心概念。努力学习不如机智学习,以下这10个概念因其在实际中应用最多而最常出现。在准备面试时,你应该主要关注这些概念。
1. CASE WHEN
许多问题都可能需要使用CASE-WHEN语句,因为这个概念功能非常多。
在根据其他变量分配某个值或类时,我们需要用CASE-WHEN可以编写复杂的条件语句。但还有一个功能鲜为人知,它可以用来透视数据。例如,如果你已有“月(month)”列,又希望为每个month创建一个单独的列,则可以使用CASE WHEN语句来透视数据。
图源:unsplash
示例问题:编写一个SQL查询重新排列表样式,以使每个月对应一个收入栏。
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 |
------ ------------- ------------- ------------- ----- -----------
2. SELECT DISTINCT
SELECT DISTINCT语句是一定要记牢的,将SELECT DISTINCT语句与聚合函数(即第三个概念)一起使用非常常见。例如,如果你有一个客户订单的数据表,则可能会被要求计算每个客户的平均订单数。在本例中,需要计算订单的总数除以客户的总数。像这样:
SELECT
count(order_id) / COUNT(DISTINCTcustomer_id) as orders_per_cust
FROM
customer_orders
3. 聚合函数
聚合函数跟上一点联系紧密,你需要对这类函数的功能有深刻理解,比如min,max,sum,count等等……你应该好好理解GROUP BY和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
4. 左连接 vs 内连接
对于那些对SQL比较陌生,或有一段时间没有使用过SQL的人来说,混淆左连接和内连接是件轻而易举的事儿。请确保你能清楚理解每个连接如何获得不同的结果,许多面试问题会要求你做一些连接。在某些情况下,选择了一个而非另一个,即是成败两条路。
5. 自连接
图源:unsplash
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
6. 子查询
子查询也称为内部查询或嵌套查询,是查询内查询,会被嵌入到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
)
7. 字符串格式化
字符串函数非常重要,尤其是在处理不清晰的数据时。公司很可能会考察你字符串的格式化和处理,以确保你懂得如何处理数据。
字符串格式化包括以下内容:
· LEFT, RIGHT
· TRIM
· POSITION
· SUBSTR
· CONCAT
· UPPER, LOWER
· COALESCE
8. 日期时间处理
图源:unsplash
你肯定会遇到一些涉及日期和时间数据的SQL问题,也许是需要按月份对数据分组,或者将变量格式从DD-MM-YYYY转换为简单的月份。
须知的函数:
· EXTRACT
· DATEDIFF
示例问题:给定一个Weather表,编写一个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
9. 窗口函数
窗口函数使你能对所有行执行聚合值,而不是只返回一行(这是GROUP BY语句的用处),这对于行排序、计算累计等需求来说十分有用。
示例问题:编写一个查询以获取薪水最高的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;
10. UNION
UNION不常出现,但偶尔也会有人问到这点,以防万一还是要了解一下。如果你有两个含有相同列的表,又希望将它们组合在一起,这时UNION就可以派上用场啦。如果你不能百分百确定如何操作它,请及时善用搜索引擎解决它。
图源:macrovector
掌握这个10个概念,面试中的大部分问题你都将迎刃而解。祝你面试顺利!
留言点赞关注
我们一起分享AI学习与发展的干货
如转载,请后台留言,遵守转载规范
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com