数据分析sql面试必会6题经典_面试数据分析会遇到的SQL题

「1」说在前面

数据存放在数据库里,以表的形式分门别类。

宜家的商品(数据)放在宜家的仓库(数据库)里,以货位的形式分门别类。

在宜家,可以通过商品上的编号,查到商品在仓库的排号和位号,取到商品。

SQL 语言是一种通用的数据库查询语言,可以通过 SQL 语言从数据库里获取到想要的数据内容。巧妇难为无米之炊。

这是数据分析师拿到“米”的重要技能,所以说 SQL 语言对于数据分析从业者来说很重要。SQL 语言在数据分析工作中有多重要?​www.zhihu.com

但是,数据库(DBMS)有很多种,比如:MySQL、Oracle、SQLserver 等。针对每种数据库,有通用的 SQL 语句和针对具体数据库的解决方案。如何学习 SQL 语言?​www.zhihu.com

「2」SQL 面试题 - 技能类假设数据库里有上述4张表,基于这4张表取数。

2.1 - 查询姓马员工的员工信息;

select *

from table_staff

where staff_name like '马%';

2.2 - 查询岗位要求(job_requirements)里提到 SQL 的岗位信息;

select *

from table_post

where job_requirements like '%SQL%';

2.3 - 查询“北京佰初数据有限公司”各个岗位上最高薪水和最低薪水;

select post_id, max(salary) as max_salary, min(salary) as min_salary

from table_staff

where company_id in (select company_id from table_company where company_name = '北京佰初数据有限公司')

group by post_id;

# 此题还可以用联结语句(join)完成 #

2.4 - 查询“北京佰初数据有限公司”各个职级(post_grade)上的最高薪水、最低薪水、平均薪水;

# 思路 #关键是理清楚各表之间的关系;通过「员工表」和「公司表」联结筛选出“北京佰初数据有限公司”的数据;

通过「员工表」和「岗位表」联结获取员工职级的数据;

参考 2.3 题获取各个职级的最高薪水、最低薪水、平均薪水;

# 可在解题后留言答案,带上题目编号 #

2.5 - 查询“北京佰初数据有限公司”每个部门(department)的人数;

select b.department_id, count(distinct a.staff_id) as staff_num

from

table_staff as a

left join

table_post as b

on a.post_id = b.post_id

where a.company_id in (select company_id from table_company where company_name = '北京佰初数据有限公司')

group by b.department_id;

# 是否可以通过用「员工表」联结「部门表」完成?为什么? #

2.6 - 将“北京佰初数据有限公司”的员工两两组队,取出所有可能的组合;

# 可在解题后留言答案,带上题目编号 #

# 解题思路参考题 #

问题:一个叫 team 的表,里面只有一个字段 name,name 字段下 team_1,team_2,team_3,team_4 四个球队,选择两个球队比赛,用一条 SQL 取出所有可能的比赛组合。

select a.name, b.name

from team as a, team as b

where a.name < b.name;

2.7 - 查询所有公司的所处行业(industry)、CEO名字、员工数量、总薪资;

# 可在解题后留言答案,带上题目编号 #

2.8 - 查询“北京佰初数据有限公司”平均薪资高于10000的岗位和平均薪资,按岗位id升序排序;

select post_id, avg(salary)

from table_staff

where company_id in (select company_id from table_company where company_name = '北京佰初数据有限公司')

group by post_id

having avg(salary) > 10000

order by post_id;

2.9 - 查询“北京佰初数据有限公司”至少有5名员工的岗位和员工数;

select post_id, count(staff_id) as staff_num

from table_staff

where company_id in (select company_id from table_company where company_name = '北京佰初数据有限公司')

group by post_id

having count(staff_id) >= 5;

# 思考1:having 后面可以写成staff_num >= 5 吗?为什么?#

2.10 - 查询“北京佰初数据有限公司”的岗位名为“数据分析师”且薪资高于15000的员工id、员工名字、薪资;结果按薪资降序排列,如果薪资相同,就按员工id升序排列;

select staff_id, staff_name, salary

from table_staff

where

salary > 15000

and post_id in (select post_id from table_post where post_name = '数据分析师')

and company_id in (select company_id from table_company where company_name = '北京佰初数据有限公司')

order by salary DESC, staff_id ASC;

2.11 - 查询“北京佰初数据有限公司”各岗位的平均薪资,按平均薪资的降序排序;

select post_id, avg(salary) as avg_salary

from table_staff

where company_id in (select company_id from table_company where company_name = '北京佰初数据有限公司')

group by post_id

order by avg_salary DESC;

# 思考:order by后面可以写成avg(salary) DESC 吗?为什么?#

2.12 - 完成下图的转换;

select

company_id,

(select staff_name from table_staff as a where a.post_id = 'P001' and a.company_id = b.company_id) as P001,

(select staff_name from table_staff as a where a.post_id = 'P002' and a.company_id = b.company_id) as P002,

(select staff_name from table_staff as a where a.post_id = 'P003' and a.company_id = b.company_id) as P003,

(select staff_name from table_staff as a where a.post_id = 'P004' and a.company_id = b.company_id) as P004

from table_staff as b

group by company_id;

2.13 - 查询每个公司薪资排名前三的岗位id、薪资,按公司id升序,按薪资降序排序;

select t1.company_id, t1.post_id, t1.salary

from table_staff as t1

where (select count(1) from table_staff as t2 where t2.salary > t1.salary and t2.company_id = t1.company_id) < 3

order by t1.company_id, t1.salary DESC;

2.14 - 取出下图的数据;

# 可在解题后留言答案,带上题目编号 #

# 参考 2.12 题 #

2.15 - 假设4张表存放在 MySQL 数据库中,查询“北京佰初数据有限公司”过去7天每天的新入职员工数量,按入职日期(date_of_entry)倒序排列;

# 可在解题后留言答案,带上题目编号 #

# 类似互联网公司查询过去一周每天的访客数 #

2.16 - 假设4张表存放在 MySQL 数据库中,查询“北京佰初数据有限公司”2019年5月每天的新入职员工数量,按入职日期(date_of_entry)倒序排列;

# 可在解题后留言答案,带上题目编号 #

2.17 - 查询“北京佰初数据有限公司”每个岗位上薪资高于岗位平均薪资的员工姓名;

# 窗口函数的使用 #

select staff_name

from (select

*,

avg(salary) over (partition by post_id) as avg_salary

from table_staff

where company_id in (select company_id from table_company where company_name = '北京佰初数据有限公司')

) as a

where salary > avg_salary;

2.18 - 查询“北京佰初数据有限公司”每个部门里薪资高于部门平均薪资的员工姓名和部门名字(department_name);

# 窗口函数、聚合函数、联结表、子查询的使用 #

「3」SQL 面试题 - 性能类

3.1 - 写出 2.8 题语句的实际执行顺序?

# 思路 #SQL 语言并不按照语法顺序来执行;

SQL 语句有一个让大部分人都感到困惑的特性,就是 SQL 语句的执行顺序跟其语句(变量传参、循环语句、迭代、调用函数 等,这些编程思维惯式)的语法顺序完全不一样;

SQL 语法顺序:SQL 执行顺序:注意点:FROM 是 SQL 语句执行第一步,而不是 SELECT【因为数据库在执行 SQL 语句的第一步是将数据加载到数据缓冲区】

SELECT 在 FROM 和 GROUP BY 之后执行,而在 ORDER BY 之前执行

如果要对 UNION 的总表排序,ORDER BY 放在 UNION 之后

3.2 - 我们公司每天产生几千万条新的数据,数据库体量很大。为了提高查询效率,写 SQL 查询数据时,应该注意哪些问题?

# 主要思路是避免全表扫描,如何避免全表扫描呢? #本文是基于难度较高的 SQL 面试题整理而成,耗时 5 个小时完成,原创不易,求「点赞」;

更多 SQL 面试题会不断补充,还是基于这 4 张表;

希望投身数据浪潮的盆友,可以看这篇回答:3个月拿到数据分析offer~

欢迎沟通,接受正向交流~

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

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

相关文章

Hibernate 4.3 ORM工具

Hibernate最近发布了Hibernate ORM 4.3的最终版本&#xff0c;它是一个基于Java的ORM框架&#xff0c;它还支持存储过程和实体图。 发行了ORM Tool Hibernate 4.3&#xff0c;实现了JPA 2.1规范&#xff0c;引入了该发行版的主要功能&#xff0c;简而言之&#xff1a; 支持在提…

301、404、200、304、500HTTP状态

一些常见的状态码为&#xff1a; 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务器超时 下面提供 HTTP 状态码的完整列表。点击链接可了解详情。您也可以访问 HTTP 状态码上的 W3C 页获取更多信息。 一、临时响应  1xx(临时响应) 表示临时响应并需要请求者继续…

SpringBoot项目中,获取配置文件信息

1.在配置文件中设置信息&#xff0c;格式如下 wechat:mpAppId: wxdf2b09f280e6e6e2mpAppSecret: f924b2e9f140ac98f9cb5317a8951c71 如果是多级目录&#xff0c;则 project:url:sell: http://localhost:8080 2.获取配置文件信息&#xff08;三种方法&#xff09; 2.1Configurat…

ajax环境配置tomcat,jcreator+tomcat环境配置

有的时候因为机器硬件原因&#xff0c;在使用eclipse的时候明显表现不足&#xff0c;其实&#xff0c;仔细想想&#xff0c;我们做web开发的时候&#xff0c;java方面也就是一些非gui类的开发&#xff0c;比如&#xff1a;action&#xff0c;service&#xff0c;dao等等。这样的…

oppo 手机侧滑快捷菜单_OPPO刚秀出卷轴屏手机,就被打了一记响亮的“耳光”

在刚刚过去的未来科技大会上&#xff0c;我国国产手机厂商 oppo可谓是出尽了风头&#xff0c;因为他们推出一款名叫“OPPO X 2021”的卷轴屏概念手机&#xff0c;并且展出了可操作的概念机实物&#xff0c;着实让所有人都惊艳了一把。因此我国的一些自媒体又嗨了&#xff0c;用…

python爬取会议论文pdf_【python2.7】爬取知网论文

# -*- coding: utf-8 -*-import timeimport urllibimport urllib2import cookielibfrom lxml import etreeimport random爬取第一页&#xff0c;获取共页数爬取第二页至最后一页# 下载当前页所有文章的pdf或cajdef download_paper(treedata, opener, localdir):传入参数&#x…

活性卡桑德拉

或是冒险从Cassandra被动地读取数据。 总览 让我们首先尝试从编程的角度定义什么是反应性。 功能反应式编程是使用功能性编程的构建块进行反应式编程的编程范例。 函数式编程是一种编程范例&#xff0c;是一种构建计算机程序的结构和元素的样式&#xff0c;这种处理将计算视…

UVA1602 Lattice Animals 搜索+剪枝

题目大意 给出一个$w\times h$的网格&#xff0c;定义一个连通块为一个元素个数为$n$的方格的集合$A,\forall x\in A, \exists y\in A$&#xff0c;使得$x,y$有一条公共边。现要求一个元素个数极多的连通块的集合$K_N$&#xff0c;使得$\forall A,B\in K_n$&#xff0c;不存在一…

js 停止事件冒泡 阻止浏览器的默认行为

在前端开发工作中&#xff0c;由于浏览器兼容性等问题&#xff0c;我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”。 浏览器默认行为&#xff1a; 在form中按回车键就会提交表单&#xff1b;单击鼠标右键就会弹出context menu. a标签 1..停止事件冒泡 JavaScrip…

魔域传说显示与服务器断开连接,《魔域传说》合服公告

8月2日合服公告亲爱的勇士&#xff0c;为了给大家提供更加优质的游戏体验&#xff0c;《魔域传说》将于2021年8月2日14:00对部分服务器进行合服维护&#xff0c;维护时长预计3小时&#xff0c;维护完成时间视维护情况可能提前或延后&#xff0c;在维护期间将不能登陆服务器&…

python怎么打开程序管理器_Python 进程管理工具 Supervisor 使用教程

因为我的个人网站 restran.net 已经启用&#xff0c;博客园的内容已经不再更新。请访问我的个人网站获取这篇文章的最新内容&#xff0c;Python 进程管理工具 Supervisor 使用教程 Supervisor 是基于 Python 的进程管理工具&#xff0c;只能运行在 Unix-Like 的系统上&#xff…

Hive的伴奏_OURDEN INSTRUMENTALS MIXTAPE Vol.108 “Sober” 伴奏合辑

OURDEN INSTRUMENTALS MIXTAPE Vol.108Sober曲目列表 Track List :Anne Tello – Love Transformation (Prod. By Peter Monk)Blac Youngsta – Left (Prod. By Yung Lan)Bling X – Missing You (Prod. By Phivestarr Productions)BlocBoy JB – Ali (Prod. By Denaro Love)Bl…

命名空间和程序集

命名空间 命名空间是在逻辑上分割代码&#xff0c;程序集是在物理上分割代码。 嵌套命名空间 namespace one { namespace two { } } 通过one.two引用内部嵌套的命名空间的代码。 命名空间不必和程序集同名。 类的可见性 internal 修饰的类&#xff0c;仅能在本程序集中访问。 p…

WebSocket和Java

WebSocket是一项很酷的新技术&#xff0c;它允许浏览器与服务器之间进行实时双向通信&#xff0c;而几乎没有开销。 我在这里想要做的是&#xff0c;提供一个非常简洁但足够全面的概述&#xff0c;以介绍如何开始使用该技术。 因此&#xff0c;从以下几件事开始&#xff1a; 在…

网页顶部进度条-NProcess.js

背景 有些网站&#xff0c;比如github上在查看项目文件夹层级时会在网页顶部出现一个 进度条&#xff0c;虽然是PC端却有一种移动端体验&#xff0c;个人认为可以提升使用体验&#xff0c;经查阅相关资料后&#xff0c;找到一个NProgress.js全站进度条插件 示例 在使用vue开发S…

点击图片放大至原始图片大小

有些时候为了排版的整洁&#xff0c;页面展示的图片不得不都是限定宽高的&#xff0c;如果想要点击图片放大至原始大小进行预览&#xff0c;再次点击回到原来样子&#xff0c;就要用到下面的代码了&#xff1a; var _w parseInt($(window).width());//获取浏览器的宽度$("…

ft服务器设置传输协议,ft服务器设置成主动模式

ft服务器设置成主动模式 内容精选换一换如果您选择使用SFS Turbo实现文件共享存储&#xff0c;此章节操作可跳过&#xff0c;您可以参见《SAP HANA用户指南》中的“格式化磁盘”章节&#xff0c;挂载Backup卷。NFS Server磁盘需要格式化&#xff0c;并挂载到相应的目录后&#…

c语言将字符串按空格分割_以空格作为分隔符的字符串三角形C语言

这是一个独特的三角形&#xff0c;它与所有其他三角形不同&#xff0c;它以这种方式打印由空格分隔的单词。我在寻找的答案不存在于任何其他问题中&#xff0c;已经检查过了。以空格作为分隔符的字符串三角形C语言输出应该是这样的这这是这是这是最好的这是最好的办法这是最好的…

制作逻辑卷快照

逻辑卷快照的功能是将逻辑卷的数据保存备份、以及快速的数据恢复 查看逻辑卷的详细信息&#xff1a;vgdisplay 对vg01卷组的lv01逻辑卷做一个名称为SNAP而大小为150M的逻辑卷快照: lvcreate -L 150M -s -n SNAP /dev/rhcsa/vo 查看逻辑卷和快照的信息: lvs 在逻辑卷中…

使用JPA标准@ViewScoped通过分页,过滤和排序进行Primefaces DataTable延迟加载

Primefaces数据表惰性分页有效&#xff0c;但是在Web上使用Criteria搜索完整示例后&#xff0c;我感到非常沮丧。 所以我混合了来自 http://stackoverflow.com/questions/13972193/how-to-query-data-for-primefaces-datatable-with-lazy-loading-and-pagination http://www.…