数据科学家常见的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,一经查实,立即删除!

相关文章

java复制文件夹中的所有文件和文件夹到另一个文件夹中

package com.gblfy.ly.controller;import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;public class FileUtils {/*** 复制整个文件夹内容* param oldPath String 原文件路径 如:c:/fqf* param ne…

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…

c语言gets和getchar区别,c语言中关于getchar()、getchar()和gets().......

getchar函数从标准输入读取一个字符并返回它的值,如果输入中不再存在任何字符,函数就会返回常量EOF(在stdio中定义)用于提示文件的结尾。getchar(),getchar()和gets()用法及缓冲区溢出:getchar有一个int型的返回值,当程…

AutoML数据增广

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

基于TensorFlow.js的JavaScript机器学习

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

linux定时脚本

#1.当前用户编辑调度文件 crontab -e #2.当前用户添加调度频次 0 4 * * * /bin/sh /app/jiazai/sql_loadv1.0/dbloadupgrade.sh#3.查看当前用户调度任务 crontab -l重启调度服务 /sbin/service crond restart 提醒:请切换root用户执行

国嵌c语言深度,国嵌C语言深度剖析班(第一期)-国嵌

国嵌C语言深度剖析班(第一期)共20个课程,包含源码及教程,主要讲了基本数据类型分析、auto,register,static分析、if,switch,do,while,for分析等,本教程提供1-5节在线学习,全套教程可以在本站下载学习。完整目录如下:第…

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

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

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

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

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

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

springboot + shiro 尝试登录次数限制与并发登录人数控制

文章目录一、尝试登录次数控制实现1. 实现原理2. maven依赖3. ehcache配置4. RetryLimitCredentialsMatcher5. Shiro配置修改6. realm添加认证器7. 并发在线人数控制实现8. ehcache配置9. shiro配置10. shiro过滤链中加入并发登录人数过滤器11. 源码地址12. 参考博客一、尝试登…

np.where多个筛选条件

a [0,1,2,3,4,5] 想要筛选出“大于等于2并且小于等于4”的数字下标&#xff0c;首先尝试了如下写法 import numpy as np a np.arange(6) print(np.where(a>2 & a<4))程序会报错 Traceback (most recent call last):File "C:\Program Files\JetBrains\PyCha…

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

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

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

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

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

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

Sentinel 成为 Spring Cloud 官方推荐的主流熔断降级方案

近日&#xff0c;Sentinel 贡献的 spring-cloud-circuitbreaker-sentinel 模块正式被Spring Cloud社区合并至 Spring Cloud Circuit Breaker&#xff0c;由此&#xff0c;Sentinel 加入了 Spring Cloud Circuit Breaker 俱乐部&#xff0c;成为 Spring Cloud 官方的主流推荐选…