数据科学家常见的5个SQL面试问题

作者 | Alexei Ledenev

翻译 | 天道酬勤,责编 | Carol

出品 | CSDN云计算(ID:CSDNcloud)

在任何以数据为中心的工作中,对SQL有深刻的理解都是成功的关键,尽管这不是工作中最有趣的部分。事实上,除了SELECT FROM WHERE GROUP BY ORDER BY之外,还有更多的SQL方法。你知道的功能越多,操作和查询所需的内容就越容易。

 

作者希望在本文中学习和交流以下两件事:

1)学习和教一些基本功能以外的SQL函数

2)探讨一些SQL面试练习问题

 

* 本文中的问题仅来自Leetcode

问题1:第二高的薪水

编写一个SQL查询用于从Employee表中获取第二高的薪水。例如,给定下面的Employee表,查询应返回200作为第二高的薪水。如果没有第二高的薪水,则查询应返回null。

 

+----+--------+
| Id | Salary |
+----+--------+
| 1   | 100     |
| 2   | 200     |
| 3   | 300     |
+----+--------+

1)解决方案A使用IFNULLOFFSET

  • IFNULL(表达,alt):如果为null,则ifnull()返回指定的值,否则返回期望的值。 如果没有第二高的薪水,我们会使用它返回null。

  • OFFSET:offset与ORDERBY子句一起使用可忽略指定的前n行。这会很有用,因为你希望获得第二行(第二高的薪水)

 

SELECT
IFNULL(
(SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1
), null) as SecondHighestSalary
FROM Employee
LIMIT 1

2)解决方案B使用MAX()

此查询表示选择的MAX薪水不等于最高薪水,这等于选择第二高的薪水。

 

SELECT MAX(salary) AS SecondHighestSalary
FROM Employee
WHERE salary != (SELECT MAX(salary) FROM Employee)

 

问题2:重复的电子邮件

编写SQL查询以在名为Person的表中查找所有重复的电子邮件。

 

+----+---------+
| Id | Email    |
+----+---------+
| 1  | a@b.com  |
| 2  | c@d.com  |
| 3  | a@b.com  |
+----+---------+

1)解决方案A子查询中的COUNT()

首先,创建一个子查询来显示每封电子邮件的频率次数。然后子查询在计数大于1的地方被过滤。

 

SELECT Email
FROM (
SELECT Email, count(Email) AS count
FROM Person
GROUP BY Email
) as email_count
WHERE count > 1

 

2)解决方案B:HAVING子句

  • HAVING是一个子句,从本质上讲,你可以将WHERE语句与聚合(GROUP BY)结合使用。

 

SELECT Email
FROM Person
GROUP BY Email
HAVING count(Email) > 1

 

问题3:温度上升

下面给定一个天气表,编写一个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                   |
+---------+------------------+------------------+

解决方案:DATEDIFF()

  • DATEDIFF是计算两个日期之间的差,用于确保我们将今天的温度与昨天的温度进行比较。

 

简单来说,查询是选择给定日期的温度高于昨天的温度的ID。

 

SELECT DISTINCT a.Id
FROM Weather a, Weather b
WHERE a.Temperature > b.Temperature
AND DATEDIFF(a.Recorddate, b.Recorddate) = 1

问题4:部门最高薪资

下面的雇员表中包含所有雇员。每个员工都有一个ID、一个薪水,还有一个部门ID列。

 

+----+-------+--------+--------------+
| Id | Name   | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1   | Joe   | 70000  | 1               |
| 2   | Jim   | 90000  | 1               |
| 3   | Henry | 80000  | 2               |
| 4   | Sam   | 60000  | 2               |
| 5   | Max   | 90000  | 1               |
+----+-------+--------+--------------+

 

下面的部门表包含公司的所有部门。

 

+----+----------+
| Id | Name      |
+----+----------+
| 1   | IT        |
| 2   | Sales    |
+----+----------+

编写SQL查询来查找每个部门中薪水最高的员工。对于上述两个表,你的SQL查询应返回以下行(行的顺序无关紧要)。

 

+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT            | Max       | 90000  |
| IT            | Jim       |90000   |
| Sales        | Henry     | 80000  |
+------------+----------+--------+

 

解决方案:IN子句

  • IN子句允许你在WHERE语句中使用多个OR子句。例如,WHERE country ='Canada'或country ='USA'与WHERE country IN('Canada','USA')相同。

 

  • 在这种情况下,我们希望过滤部门表来仅显示每个部门的最高薪水(即DepartmentId)。然后,我们可以将两个表连接在一起,其中DepartmentId和Salary在已过滤的Department表中。

 

SELECT
Department.name AS 'Department',
Employee.name AS 'Employee',
Salary
FROM Employee
INNER JOIN Department ON Employee.DepartmentId = Department.Id
WHERE (DepartmentId , Salary)
IN
( SELECT
DepartmentId, MAX(Salary)
FROM
Employee
GROUP BY DepartmentId
)

问题5:互换座位

玛丽是一所中学的老师,她有一张座位表,上面存储着学生的姓名和相应的座位ID。列ID是连续的增量,玛丽想为相邻的学生互换座位。

 

你可以编写SQL查询来输出玛丽的结果吗?

 

+---------+---------+
|    id     | student |
+---------+---------+
|    1      | Abbot   |
|    2      | Doris   |
|    3      | Emerson |
|    4      | Green   |
|    5      | Jeames  |
+---------+---------+

 

对于样本输入,输出为:

 

+---------+---------+
|    id     | student |
+---------+---------+
|    1      | Doris   |
|    2      | Abbot   |
|    3      | Green   |
|    4      | Emerson |
|    5      | Jeames  |
+---------+---------+

 

注意:如果学生人数为奇数,则无需更改最后一个座位。

 

解决方案:CASE WHEN

  • 可以将CASE WHEN THEN语句视为编码中的IF语句。

  • 第一条WHEN语句检查行数是否为奇数,如果行数为奇数,请确保ID号不变。

  • 第二个WHEN语句为每个id加1(例如,1,3,5变为2,4,6)

  • 同样,第三个WHEN语句将每个id减1(2,4,6变为1,3,5)

 

SELECT
CASE
WHEN((SELECT MAX(id) FROM seat)%2 = 1) AND id = (SELECT MAX(id) FROM seat) THENid
WHEN id%2 = 1 THEN id + 1
ELSE id - 1
END AS id, student
FROM seat
ORDER BY id

以上就是所有的解决方法,如果有不清楚的地方或其他意见,欢迎评论告诉我们!

 

阿里大牛:华先胜、丁险峰直播分享!

周四晚7点,阿里巴巴集团副总裁华先胜——《人工智能:是风、是云,还是雨?

面向开发者详解视觉智能技术规模化落地的挑战;面向企业详述如何通过核心AI技术、产品化 及平台化实现客户价值并构建壁垒?

即刻报名:https://edu.csdn.net/huiyiCourse/detail/1163

推荐阅读:从Kubernetes安全地访问AWS服务,告诉你多云场景下如何管理云凭据!
解析云原生与云计算本质区别,别再傻傻分不清楚了!
Go 大败!Google 宣布 Fuchsia 终端开发只支持 C/C++/Dart
干货!从0到1教你打造一个令人上瘾的聊天机器人?
游戏之道
真实版“删库跑路”?程序员蓄意破坏线上生产环境!真香,朕在看了!点击“阅读原文”,参与调查

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言程序滞留,c语言有个可以使程序延时的语句是什么?

满意答案hsgfzdg99推荐于 2017.09.11采纳率:57% 等级:9已帮助:1169人Sleep函数:功 能: 执行挂起一段时间  用 法: unsigned sleep(unsigned seconds);  注意:  在VC中使用带上头文件#include  在VC中,Sleep中的第一个英文字符为大写的…

从濒临解散到浴火重生,OceanBase 这十年经历了什么?

阿里妹导读:谈及国产自研数据库,就不得不提 OceanBase。与很多人想象不同的是,OceanBase 并非衔着金钥匙出生的宠儿。相反,它曾无人看好、困难重重,整个团队甚至数度濒临解散。 从危在旦夕到浴火重生,Ocean…

两成开发者月薪超 1.7 万、算法工程师最紧缺! | 中国开发者年度报告

整理 | 郭芮 责编 | 唐小引 出品 | CSDN(ID:CSDNnews) “求知若饥,虚心若愚”——这个原本出自《全球概览》的俳句,因为乔布斯在斯坦福大学毕业演讲中的引用而备受推崇,流传成为 IT 界的至理名言之一。在…

拒绝版权流氓!阿里巴巴重磅发布免费商用字体

UCAN 2019 设计大会在杭州国际博览中心开幕,超过 4000 位来自世界各地的设计师参与了这场阿里巴巴设计举办的盛会。 继去年品牌升级为阿里巴巴设计(Alibaba Design)后,阿里巴巴经济体设计委员会委员长杨光(青云&#…

全站CSRF漏洞

文章目录二、解决方案2.1. 创建CSRF防御统一管理2.2. 创建csrfToken校验2.3. 加密工具类2.4. 查询实战2.5. 添加和更新实战默认guns不支持添加headers的需要添加ax2二、解决方案 2.1. 创建CSRF防御统一管理 package com.gblfy.sys.config.web.csrf;import com.gblfy.base.uti…

AutoML数据增广

DeepAugment是一个专注于数据扩充的自动化工具。 它利用贝叶斯优化来发现针对您的图像数据集定制的数据增强策略。 DeepAugment的主要优点和特点是: 降低CNN模型的错误率(WRN-28-10显示CIFAR10的错误率降低了60%)通过自动化流程可以节省时间比谷歌之前的解决方案—…

基于TensorFlow.js的JavaScript机器学习

Credits: aijs.rocks 虽然python或r编程语言有一个相对容易的学习曲线,但是Web开发人员更喜欢在他们舒适的javascript区域内做事情。目前来看,node.js已经开始向每个领域应用javascript,在这一大趋势下我们需要理解并使用JS进行机器学习。由…

阿里巴巴、支付宝员工都在用的知识管理工具,究竟有何特别?

公司内各部门工作文档难以共享?缺乏高效便捷的团队协作工具?文档放到在线云平台担心安全?…… 2019年4月22日,蚂蚁金服旗下知识创作与分享工具语雀发布“空间功能”。语雀在支持在线文档编写、多人协作、灵活的团队管理和金融级安…

探索处理数据的新方法,8 个重点带你搞懂云数据库——DBaaS(数据库即服务)到底是什么!...

作者| Rohan Wadiwala、Mangesh More翻译 | 天道酬勤,编辑 | Carol出品| CSDN云计算(ID:CSDNcloud)在分析的世界中,网站的每次点击都是数据分析的候选对象,显然,这会涉及大量的数据生成。对于海…

阿里开发者招聘节 | 面试题05: 关于epoll和select的区别,哪些说法是正确的?

为帮助开发者们提升面试技能、有机会入职阿里,云栖社区特别制作了这个专辑——阿里巴巴资深技术专家们结合多年的工作、面试经验总结提炼而成的面试真题这一次将陆续放出(面试题官方参考答案将在专辑结束后统一汇总分享,点此进入答题并围观他…

c语言printf里的自增,笔试题记录:C语言——函数printf()的执行机制;先自增与后自增的区别;取值运算与自增运算的优先级...

考点:函数printf()的执行机制:参数按照从右至左的顺序入栈,在调用时出栈;考察运算符“”在变量之前、变量之后的运算机制,即是先赋值/还是先自增*(p)、*(p)、*(p1)之间的区别后面两项主要是考察:取值运算与…

分布式系统:CAP 理论的前世今生

CAP 理论是分布式系统设计中的一个重要理论,虽然它为系统设计提供了非常有用的依据,但是也带来了很多误解。本文将从 CAP 诞生的背景说起,然后对理论进行解释,最后对 CAP 在当前背景下的一些新理解进行分析,澄清一些对…

你的企业混合云了吗?来看看评估混合云解决方案时要注意的6个原则!

作者| Matt Kimball翻译 | 天道酬勤,编辑 | Carol出品| CSDN云计算(ID:CSDNcloud)混合云如今很流行。几乎每个IT公司都声称已部署了解决方案,但实际上实现的却很少。相反,它们拥有与多个云实例进行某种程度…

c语言int超出范围字符串,Go返回int64类型字段超出javascript Number范围的解决方法...

Go返回int64类型字段超出javascript Number范围的解决方法最近在项目中,一个go服务给前端提供了一个接口,返回json格式数据,其中Int64字段会超出javascript Number可表示的最大的Int值会丢精度,可以通过返回string类型值来屏蔽这个…

构建可靠系统的原则与实践

随着阿里技术的发展,我们的技术系统越来越成为社会的基础设施,对于这些系统的可靠性要求也就越来越高。但是实际上很多的基础的产品和系统确仍然会出现一些稳定性问题,那么如何才能构建可靠的系统呢?是不是制定非常严格而细致的规…

看完就能独自把集群搭起来!Hadoop HDFS完全分布式环境搭建以及技术详解

作者 | 慢慢变成大佬责编 | Carol出品 | CSDN云计算(ID:CSDNcloud)在文章开始之前,作者想要告诉大家:读懂本篇文章,能让小白快速入门,并且能够搭建完全分布式的集群,以及能对Hadoop …

使用idea创建JavaWeb项目

【第一步】 File—New—Project 【第二步】 选择Java Enterprise版本,然后配置tomcat 注意:这里关联的tomcat home指的是tomcat的解压目录(bin目录的上一级目录); 【第三步】 选择使用模板创建项目 【第四步】 填写…

阿里云栖开发者沙龙PHP技术专场-聊聊服务稳定性保障这些事

本文主要带大家了解服务稳定性的重要性和相关策略。策略大概分两部分,第一方面从架构层面介绍保障服务稳定性的常见策略(限流,降级,隔离,超时,重试和集群)。第二个方面是从流程方面(…

ccs读取dat文件c语言程序,TMS320DM642学习----第六篇(CCS中.dat文件类型详解)

1、如下为.dat文件中文件头的基本格式:MagicNumber Format StartingAddress PageNum Length [NewFormat]下面是分别的解释:MagicNumber:1651.Format:a number from 1 to 4, indicating the format of the samples in the file. Th…

阿里开发者招聘节 | 面试题06-07: MySQL的数据如何恢复到任意时间点

为帮助开发者们提升面试技能、有机会入职阿里,云栖社区特别制作了这个专辑——阿里巴巴资深技术专家们结合多年的工作、面试经验总结提炼而成的面试真题这一次将陆续放出(面试题官方参考答案将在专辑结束后统一汇总分享,点此进入答题并围观他…