想通过数据科学面试,这十个SQL概念你必须掌握

数据库 SQL Server
随着智能时代的逐渐来临,用无代码方法做事开始变得广受欢迎,我们很有必要了解一下无代码方法了。使用无代码方法并不意味着你不明白怎样写代码,事实上,你必须写代码写得好,才能用好无代码方法。

 本文转载自公众号“读芯术”(ID:AI_Discovery)。

SQ是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,其功能非常强大,是数据科学面试中绕不过的考点。

[[337292]]

很多人为了通过面试事无巨细地准备,犄角旮旯都不敢放过。但事实上,在现实面试中大多数公司只测试其少数核心概念。努力学习不如机智学习,以下这10个概念因其在实际中应用最多而最常出现。在准备面试时,你应该主要关注这些概念。

1. CASE WHEN

许多问题都可能需要使用CASE-WHEN语句,因为这个概念功能非常多。

在根据其他变量分配某个值或类时,我们需要用CASE-WHEN可以编写复杂的条件语句。但还有一个功能鲜为人知,它可以用来透视数据。例如,如果你已有“月(month)”列,又希望为每个month创建一个单独的列,则可以使用CASE WHEN语句来透视数据。

示例问题:编写一个SQL查询重新排列表样式,以使每个月对应一个收入栏。

 

  1. Initial table
  2. +------+---------+-------+ 
  3. | id | revenue | month | 
  4. +------+---------+-------+ 
  5. | 1 | 8000 | Jan | 
  6. | 2 | 9000 | Jan | 
  7. | 3 | 10000 | Feb | 
  8. | 1 | 7000 | Feb | 
  9. | 1 | 6000 | Mar | 
  10. +------+---------+-------+ 
  11. Result table
  12. +------+-------------+-------------+-------------+-----+-----------+ 
  13. | id | Jan_Revenue | Feb_Revenue |Mar_Revenue | ... | Dec_Revenue | 
  14. +------+-------------+-------------+-------------+-----+-----------+ 
  15. | 1 | 8000 | 7000 | 6000 |... | null | 
  16. | 2 | 9000 | null | null | ... | null | 
  17. | 3 | null | 10000 | null | ... | null | 
  18. +------+-------------+-------------+-------------+-----+-----------+ 

2. SELECT DISTINCT

SELECT DISTINCT语句是一定要记牢的,将SELECT DISTINCT语句与聚合函数(即第三个概念)一起使用非常常见。例如,如果你有一个客户订单的数据表,则可能会被要求计算每个客户的平均订单数。在本例中,需要计算订单的总数除以客户的总数。像这样:

 

  1. SELECT 
  2.    COUNT(order_id) / COUNT(DISTINCTcustomer_id) as orders_per_cust 
  3. FROM 
  4.    customer_orders 

3. 聚合函数

聚合函数跟上一点联系紧密,你需要对这类函数的功能有深刻理解,比如min,max,sum,count等等……你应该好好理解GROUP BY和HAVING子句。我强烈建议你花点时间去解决实际问题,我们在一些创造性的方法中常常会用到聚合函数。

示例问题:编写一个SQL查询,在名为Person的表中找出所有重复的电子邮件。

 

  1. +----+---------+ 
  2. | Id | Email   | 
  3. +----+---------+ 
  4. | 1  | a@b.com | 
  5. | 2  | c@d.com | 
  6. | 3  | a@b.com | 
  7. +----+---------+ANSWER: 
  8. SELECT 
  9.     Email 
  10. FROM 
  11.     Person 
  12. GROUP BY 
  13.     Email 
  14. HAVING 
  15.     count(Email) > 1 

4. 左连接 vs 内连接

对于那些对SQL比较陌生,或有一段时间没有使用过SQL的人来说,混淆左连接和内连接是件轻而易举的事儿。请确保你能清楚理解每个连接如何获得不同的结果,许多面试问题会要求你做一些连接。在某些情况下,选择了一个而非另一个,即是成败两条路。

5. 自连接

SQL自连接指的是将表与其自身连接,它听上去用处不大,但实际上用处十分广泛。在许多实际应用中,数据存储在一个大表中,而不是许多小表中,我们需要自连接来解决特定的问题。

示例问题:给定下面的Employee表,编写一个SQL查询,找出收入高于经理的员工。在表中,乔(Joe)是唯一收入高于经理的员工。

 

  1. +----+-------+--------+-----------+ 
  2. | Id | Name  | Salary | ManagerId | 
  3. +----+-------+--------+-----------+ 
  4. | 1  | Joe   | 70000 | 3         | 
  5. | 2  | Henry | 80000  | 4        | 
  6. | 3  | Sam   | 60000 | NULL      | 
  7. | 4  | Max   | 90000 | NULL      | 
  8. +----+-------+--------+-----------+Answer: 
  9. SELECT 
  10.     a.Name as Employee 
  11. FROM 
  12.     Employee as a 
  13.         JOIN Employee as b on a.ManagerID= b.Id 
  14. WHERE a.Salary > b.Salary 

6. 子查询

子查询也称为内部查询或嵌套查询,是查询内查询,会被嵌入到WHERE子句中,可以解决需要多次按序查询以生成给定结果的特殊问题。子查询和WITH AS语句在查询中的使用次数都非常多,因而必须掌握。

示例问题:假设一个网站包含两个数据表,Customers表和Orders表。编写一个SQL查询来找出所有从未订购过的客户。

 

  1. Table: Customers.+----+-------+ 
  2. | Id | Name  | 
  3. +----+-------+ 
  4. | 1  | Joe   | 
  5. | 2  | Henry | 
  6. | 3  | Sam   | 
  7. | 4  | Max   | 
  8. +----+-------+Table: Orders. 
  9. +----+------------+ 
  10. | Id | CustomerId | 
  11. +----+------------+ 
  12. | 1  | 3          | 
  13. | 2  | 1          | 
  14. +----+------------+Answer: 
  15. SELECT 
  16.     Name as Customers 
  17. FROM 
  18.     Customers 
  19. WHERE 
  20.     Id NOT IN ( 
  21.         SELECT 
  22.             CustomerId 
  23.         FROM Orders 
  24.     ) 

7. 字符串格式化

字符串函数非常重要,尤其是在处理不清晰的数据时。公司很可能会考察你字符串的格式化和处理,以确保你懂得如何处理数据。

字符串格式化包括以下内容:

  • LEFT, RIGHT
  • TRIM
  • POSITION
  • SUBSTR
  • CONCAT
  • UPPER, LOWER
  • COALESCE

8. 日期时间处理

你肯定会遇到一些涉及日期和时间数据的SQL问题,也许是需要按月份对数据分组,或者将变量格式从DD-MM-YYYY转换为简单的月份。

须知的函数:

  • EXTRACT
  • DATEDIFF

示例问题:给定一个Weather表,编写一个SQL查询以找出所有高于之前(昨天)温度的日期Id。

 

  1. +---------+------------------+------------------+ 
  2. | Id(INT) | RecordDate(DATE) | Temperature(INT) | 
  3. +---------+------------------+------------------+ 
  4. |       1 |       2015-01-01 |               10 | 
  5. |       2 |       2015-01-02 |               25 | 
  6. |       3 |       2015-01-03 |               20 | 
  7. |       4 |       2015-01-04 |               30 | 
  8. +---------+------------------+------------------+Answer: 
  9. SELECT 
  10.     a.Id 
  11. FROM 
  12.     Weather a, 
  13.     Weather b 
  14. WHERE 
  15.     a.Temperature > b.Temperature 
  16.     AND DATEDIFF(a.RecordDate,b.RecordDate) = 1 

9. 窗口函数

窗口函数使你能对所有行执行聚合值,而不是只返回一行(这是GROUP BY语句的用处),这对于行排序、计算累计等需求来说十分有用。

示例问题:编写一个查询以获取薪水最高的empno,确保解决方案可以处理关系。

 

  1.   depname  | empno | salary |     
  2. -----------+-------+--------+ 
  3.  develop  |    11 |   5200 | 
  4.  develop  |     7 |   4200 | 
  5.  develop  |     9 |   4500 | 
  6.  develop  |     8 |   6000 | 
  7.  develop  |    10 |   5200 | 
  8.  personnel |     5 |  3500 | 
  9.  personnel |     2 |  3900 | 
  10.  sales    |     3 |   4800 | 
  11.  sales    |     1 |   5000 | 
  12.  sales    |     4 |   4800 |Answer: 
  13. WITH sal_rank AS 
  14.   (SELECT 
  15.     empno, 
  16.     RANK() OVER(ORDER BY salary DESC) rnk 
  17.   FROM 
  18.     salaries) 
  19. SELECT 
  20.   empno 
  21. FROM 
  22.   sal_rank 
  23. WHERE 
  24.   rnk = 1; 

10. UNION

UNION不常出现,但偶尔也会有人问到这点,以防万一还是要了解一下。如果你有两个含有相同列的表,又希望将它们组合在一起,这时UNION就可以派上用场啦。如果你不能百分百确定如何操作它,请及时善用搜索引擎解决它。

掌握这个10个概念,面试中的大部分问题你都将迎刃而解。祝你面试顺利!

 

 

责任编辑:华轩 来源: 读芯术
相关推荐

2022-06-12 23:43:19

SQL数据函数

2022-03-22 23:18:55

SQL技术内部概念

2020-08-28 13:49:13

数据统计学面试

2023-04-20 10:29:46

数据管理数据分析

2019-07-11 14:45:52

简历编程项目

2018-01-31 22:30:05

数据科学家数据专家工程师

2020-09-08 15:15:06

Python数据科学Python库

2011-01-28 15:11:15

PowerShell

2021-10-18 08:01:44

TS语言TypeScript

2011-05-11 15:28:05

2021-03-11 09:02:37

SQL数据库数据

2020-09-28 08:54:51

python

2020-08-06 08:27:21

JavaScript概念语言

2021-09-15 09:20:37

Python函数代码

2024-01-12 07:32:35

数据科学Python库项目

2019-12-17 18:11:09

跳槽那些事儿机器学习人工智能

2019-12-03 09:11:57

数据科学编程算法

2023-12-23 11:15:25

2022-02-22 23:25:19

Python编程语言开发

2019-09-25 09:20:33

机器学习Python数据科学
点赞
收藏

51CTO技术栈公众号